Supper:
1:当子类中 方法或属性 跟父类中的重名 ,Supper 来 访问父类的 属性,方法,但是不能访问私有类型。
2:访问父类的构造器,但是要注意只能放在构造器第一句,并且只能出现一句。
3:找方法属性时候,先找本类,再找父类,一直往上级父类寻找,直到找到。或者到了Object类还没有找到,那么将进行 报错。
4:this 与 supper 的区别在于 两者在 访问(寻找)或调用 , 方法、属性的起点不一样,this 在本类开始往上级父类寻找,supper则是从父类往更上级父类里面寻找。
方法重写/覆盖:
1:重写指子类里面的一个方法跟父类中的某个方法 名字、类型、参数 全部都一样,那么就说子类里面的这个方法重写了父类中的方法。
注意:这里的类不仅可以是父子类关系,还可以是爷孙类关系。
2:特意强调重写方法注意: 子类的返回类型必须跟父类一样,或者其返回类型是父类返回类型的子类。
子类里面的方法不可以缩小父类方法的权限。(public->protected->默认->private)
多态:
学编程一定要注意区分 编译类型 ,运行类型
1:多态的前提:两个类存在继承关系。
2:向上转型: 父类类型 引用名 = new 子类类型();
特点: 编译看左边,运行看右边。 编译跟运行结果分开的,最终结果看子类的具体实现。 它不能调用子类特有的成员。
3:向下转型: 子类类型 引用名 = (子类类型)父类引用;
注意理解 特点:只能强行转换 父类的引用,不能强转父类对象。 要求父类的引用必须是指向当前目标类型的对象 。 可以调用子类的特有成员。
Anmial a1 = new Cat();
那么 Cat c1 = (Cat) a1; √
而 Dog d1 = (Dog) a1; × Cat c1 = (Cat) Anmial; ×
4:属性: 属性没有重写之说,属性的值要看编译类型
5:instanceOf :比较操作符,用于判断对象类型是否为 XX类型 或 其子类型。
if(p instanceof student ) 意思是: p 的运行类型如果·是student
6:动态绑定机制:
①当调用对象方法时候,该方法会和该对象的运行类型(等号右边)绑定。
②当调用对象属性时候,没有动态绑定机制,哪里声明哪里使用。
( 编译、运行; )
equals方法:
1: == 与 equals 对比: (面试题)
①:== 基本类型、引用类型它都可以判断。判断基本类型时候,判断的是值是否相等。 判断引用类型时候,判断的是地址是否相等,即判断是不是同一个对象。
②:equals(是总爸爸Object 里面的方法) 只能判断引用类型。它默认是判断地址是否相等,但子类往往会重写该方法,用于判断内容是相等。列如Object的子类 :String,Integer。
简单的说就是 没有重写比较的是地址,重写了比较的是值。
Scanner sc = new Scanner(System.in);