您的位置:首页 > 编程语言 > Java开发

java三大特征封装、继承、多态

2013-07-28 12:41 776 查看
面向对象的三大特征:封装、继承、多态1封装:属性私有化,对外提供统一访问的get/set接口。完全封装封装指的是将对象的状态信息(属性)和行为(方法)捆绑为一个逻辑单元的机制。将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法实现对隐藏信息的操作与访问。java中通过将数据封装声明为私有的(private),再提供一个或多个公开的(public)方法实现对该属性的操作,以实现下述目的:(1).隐藏一个类的实现细节(2).防止对封装数据未经授权的访问。使用者只能通过事先制定好的方法来访问数据,可以方便的加入控制逻辑,限制对属性的不合理操作。(3)有利于保证数据的完整性(4)便于修改,增强代码的可维护性。为了实现良好的封装,需要从两方面考虑:(1)将对象的属性和实现细节隐藏起来,不允许外部直接访问(2)把方法暴露出来,让方法来操作或访问这些属性实现封装的关键是不要让方法直接访问其他类的属性,程序应该只能通过指定的方法与对象的数据交互。封装赋予对象”黑盒”特性,这是实现重用性和可靠性的关键。使用访问控制符:(private、默认、protected、public)(1)private:访问控制级别:如果类里的一个成员(包括属性或方法)使用private访问控制符来修饰,则这个成员只能在该类的内部被访问。显然,这个访问控制符修饰属性最合适,使用它来修饰属性就可把属性隐藏在类的内部。(2)default访问控制权限(包访问权限):如果类里的一个成员(包括属性和方法)或则一个顶级类不使用任何访问控制符,我们就成他为默认的访问控制,defaule访问控制的成员或顶级类可以被相同包下的其他类访问。(3)protected访问控制权限(子类访问权限):如果一个成员(包括属性和方法)使用protected访问控制修饰符,那么这个成员既可以被同一包中的其他类访问,也可以被不同包中的子类访问。通常情况下,如果protected来修饰一个方法,通常是希望其子类重用这个方法。(4)public访问控制权限(公共访问权限):这是一个最宽松的访问控制级别,如果一个成员(包括属性和方法)或者一个顶级类使用public修饰,这个成员或顶级类就可以被所有的类访问。不管访问类和被访问类是否处于同一个包中,是否具有父子类继承关系。定义一个Animals类
public class Animals {
//定义属性
private String name;
private int age;
public void Info(){
System.out.println("我是一只动物");
}
//定义输出名字name和年龄age的方法
public void ToString(String name,int age){
System.out.println("name:"+this.getName()+",age:"+this.getAge());
}
//定义属性存值取值的get()/set()方法
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
2.继承:继承的特点:(1)java通过extends关键字来实现,实现继承的类被称为子类,被继承的类被称为父类,有时候也称为基类、超类。(2)在继承关系中,父类更通用,子类更具体,父类具有更一般的特征和行为,而子类除了具有父类的特征之外还具有自己特有的特征和行为。继承的好处:(1).代码的复用(2).为了以后多态的使用继承来的东西:(1).一般的属性和方法被继承(2).构造方法不被继承(3).私有的方法不被继承(4)私有的属性被隐藏,可以通过继承来的公有方法访问(5).什么时候建立父子类关系:任何A出现的地方,换做是B之后仍然成立,或者说:“B is a A”,如果符合这个公式,就可以建立父子类关系。对于构造方法来使:构造方法第一行不是super(...)就是this(...),如果一个构造方法第一行不是this(...)或super(...),则默认是对父类无参构造的调用super(...);不可能所有的构造都是this(...),至少有一个super(...);注意:在子类中使用和父类同样名字的属性没有意义,对实际开发没有任何好处,所以应该避免。如果子类中有和父类名字相同的方法:(1).如果参数不同,构成了重载(2).如果参数相同,构成了重写重写:覆盖、复写(1).发生在父子类中(2).同名同参同返回类型(3).子类方法的修饰符不能比父类方法的修饰符更封闭。(要么相同、要么更开放)(4)private--默认--protected--public(5)子类方法抛出的异常不能比父类方法抛出的异常更宽泛this()和super():(1).this指本类对象(2)Super指父类对象a).可以通过super.来访问父类的属性或方法,属性的话注意修饰符的作用范围。b).子类可以通过super(..)访问父类的构造方法,给属性赋值c)如果子类构造方法中没有对本类及父类构造方法的调用,则默认有super(...);d)如果一个类没有指定继承其他父类,则它的父类是Object.定义一个子类Cat在定义一个子类Dog都继承自类AnimalsCat类:
public class Cat extends Animals{
//定义子类特有属性
private String food;
//定义子类特有属性的get()/set()方法
public String getFood() {
return food;
}
public void setFood(String food) {
this.food = food;
}
public void Info(){
System.out.println("我是一只小猫");
}
}
Dog类:
public class Dog extends Animals{
//定义私有属性
private String food;
public void Infomation(){
System.out.println("我是一只小狗");
}
public String getFood() {
return food;
}
public void setFood(String food) {
this.food = food;
}
}
3.多态:一个对象,多种状态。父类引用指向子类的对象。多态的两个基本原理:(1).发生多态时,只能调用父类的方法,不能调用子类的方法(2).发生多态时,如果子类中重写了父类的方法,在调用这个方法,调用的是子类重写之后的方法。 写一个测试类TestAnimal:
public class TestAnimal {
public static void main(String[] args) {
//多态
Animals cat = new Cat();
//在子类Cat中重写了父类Info()方法,所以在调用这个方法时,调用的是子类重写之后的方法。
cat.Info();
//在子类Dog中没有重写父类的Info()方法,所以子类对象调用该方法时,调用的是父类的该方法
Animals dog = new Dog();
dog.Info();
//发生多态时,只能调用父类的方法,不能调用子类的方法.这里Infomation()是子类的方法,所以发生多态是子类对象无法调用子类方法
//dog.Infomation();
}
}
输出结果:我是一只小猫
我是一只动物
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: