the fifth day 001OOP面向对象
对象
栈 》》堆 引用
类 静态属性 动态方法
封装
高内聚,低耦合。类的内部数据操作细节自己完成,不容许外部干涉
数据的影藏 : 禁止访问对象中数据的实际表示,通过接口调用 get /set
安全细节 统一接口 便于维护
继承extends
所有类都默认继承了object 类
子类只有一个直接父类,this.name 本类中的属性 super.name 父类的属性
子类调用父类的构造supper();必须放在第一行
super 和this 不能同时调用
final修饰的类不能被继承 final修饰的属性不能被重新赋值及改变
方法重写
子类重写父类的方法 override
参数列表相同,方法名相同,范围修饰符可以扩大,不能缩小 。 异常范围可以被缩小 不能扩大
重写可以避免父类不需要的方法,完善父类不满足的方法
static方法属于类不能被重写 ,final修饰的存在常量池中不能被重写 private私有的不能被重写
多态
-
有继承关系
-
子类重写父类方法
-
父类引用指向子类对象
-
instanceof 判断两个类之间是否存在父子关系
父类 a = new 子类 b();父类引用指向子类 ,a可以调用的方法关键看a的引用类型,父类可调用的方法
A a = new A(); B b = new A(); a.aa(); a.bb();//子类可以直接调用父类方法因为子类继承了父类 b.bb(); ((A) b).aa();//父类引用无法直接调用子类方法,强转为子类引用才可以 public class A extends B { public void test(){ System.out.println("i am A"); } public void aa(){ System.out.println("A 子类aa方法"); } } public class B { public void bb(){ System.out.println("B 父类方法b"); } public void test(){ System.out.println("wo is B"); } }
static {
System.out.println("静态代码块最先执行且只执行一次");
}
{
System.out.println("匿名代码块随对象创建每次初始化");
}
public void C(){
System.out.println("构造随对象创建每次默认执行");
}