- instanceof判断:在运行阶段进行动态判断引用指向对象的类型。
c instanceof Cat
为true表示c指向的堆内存中的对象是Cat。但凡对类型向下转型,养成好习惯使用instanceof进行判断。
- 静态方法也可以使用
引用.
进行调用,不过这样会造成程序员的困惑,这种调用与对象无关,在底层还是通过类名.
进行调用
Animal a = new Cat();
a.eat();
- 方法覆盖(重写)需要和多态机制联合起来才有意义。
- 用private修饰的私有方法不能被重写,会调用父类原有的方法
- super作用:
super()
访问父类构造方法.
- 类比
this()
作用:在一个构造方法中调用另一个构造方法;this(实参) 可以在无参构造中调用有参构造,进行属性初始化。
- super(实参) 可以调用父类有参构造,初始化父子类共有属性(公共属性)(仅在父类中声明,private修饰无法直接访问,通过构造方法间接访问)。
- 在创建一个对象过程中,可能会发生这种情况,子类构造方法调用父类构造方法 在继续调用父类构造方法,直至调用object类的构造方法,实际上只创建了一个对象。
super()
作用其实是初始化了父类对象特征。
- super 不是引用,不保存内存地址,不指向任何对象。所以若出现
System.out.println(super);
类似语句则会报错。
- interface 接口:
- 接口中只存在常量和抽象方法。
- 所有属性都是public abstract修饰的,可以省略;同理,常量的修饰符public static final 也可以省略;
- 无论是向上转型还是向下转型 类与类之间都必须有继承关系。没有继承关系,编译器会报错(但不适用于接口间)
- 类与类之间的关系:
is a
关系 表示可以设置会继承关系
has a
表示 关联关系表示可以以实例变量形式存在,例如下边例子中的顾客和菜单的关系;
like a
表示实现关系 比如厨师像一个菜单。