关于面向对象(OOB)的一些理解。主要是封装、继承、多态。
【封装】
1.将类的属性进行私有化处理,不允许外部程序直接访问。并对外提供统一的方法,设置和读取私有属性。
2.实现访问控制,限制属性访问。
优点:只能通过规定的方法访问数据,方便在方法中加入控制语句,防止不合法赋值。
3.除了属性的封装之外,将需要重复使用的代码提取到方法中加入控制语句,防止不合法赋值。
public class Demo01_Test {
private String person;
public String getPerson() {
return person;
}
public void setPerson(String person) {
this.person = person;
}
}
【继承】
1.子类继承父类使用extends关键字
2.不能继承父类的私有属性。
3.子类中访问父类成员需要使用super关键字。super.name
super.属性 访问父类属性
super.方法 访问父类方法
如果,子类中没有同名的属性和方法覆盖父类,则依然可以直接使用this。属性调用从父类中继承的非私有属性。
但是,如果子类中重写了与父类同名的属性:this.属性访问的是本类;super.属性访问的时父类属性。
在子类的构造函数中使用super();调用父类构造。而且super()函数必须在子类构造的第一行。
注意:即使使用super关键字也不能访问父类的私有属性和私有方法。
private 本类
friendly(默认)本类 本包
protected 本类 本包 非同包子类
public 本类 本包 非同包子类 其他任何包
注意:protect在非同包子类中只能通过子类对象访问,不能直接调用或通过父类对象访问。
父类属性》》父类构造》》》子类属性》》子类构造
在java中继承只能单继承。但可以多层继承。
public class test1(){}
public class test2 extends test1(){}
public class test3 extends test2(){}
【多态】
1.同一种事物,由于条件不同展示出不同的结果,叫做多态。
例:
英国人说英国话,中国人说中国话,不叫多态。
同样是人,有人说中华,有人说或英国华,这交多态
2.程序中的多态:同一个引用类型,由于使用不同的对象实力,而执行不同的操作。
Chinese c = new Chinese(); c.say();
English e= new English(); e.say();
英国人说英国华,中国人说中国话,这不叫多态。
Person p = new Chinese(); p.say();
Person p = new English(); p.say();
同样是人,有人说中国话,有人说英国华,这就是多态。
[实现多态的条件]
1.子类继承父类。
2.子类重写父类的方法。
3.父类引用指向子类对象。//保证:同一个父类引用类型,用不同的子类实现不同的方法。
【父子类转型】
[向上转型]
子类向父类转,自动转换。o
Person p=new Chinese();
特点:绝对安全。子类独有的属性和方法将会丢失。只能调用父类中存在的属性和方法。
如果父类方法不是抽象方法,调用时执行的方法体依然是子类的。
应用:多态中父类引用指向子类对象。
[向下转型]
父类向子类转:强制转换。
Person p=new English();
Chinese c =()Chinese p;//ClassCastException 类转换异常:因为p不是Chinese的实例,强转会造成类转换异常。
Person p=new Chinese();
Chinese c =()Chinese p;//ClassCastException 因为p是Chinese的实例,可以强制转换。
[转换异常解决方法]:
经常出现类转换异常。用instanceof检测父类引用是不是子类的实例。
if(p instanceof Chinese){
Chinese c =(Chinese) p;