第一节 JAVA中的继承
1.继承的概念:它是类和类的一种关系,“is a”的关系,java中的继承是一种单继承,一个类只有一个父类,superclass 父类;
2.继承的好处:子类拥有父类的所有属性和方法。private修饰的无效子类不能拥有,private的属性继承不了。java的继承可以实现代码复用;
3.语法规则 class 子类 extends 父类{ },idea中快速建立子类的办法,在当前public class 这行 alt+enter 然后选择subclass。
第二节 JAVA中的方法重写
1、对父类的方法不满意时,子类可以重写这个方法,并且在子类调用时会优先调用子类的方法。
2、语法规则:返回值类型、方法名、参数类型及个数都要与父类继承的方法相同,这才叫方法的重写。
重写和重载的区别
1.重写必须继承,重载不用。
2.重写的方法名,参数数目相同,参数类型兼容,重载的方法名相同,参数列表不同。
3.重写的方法修饰符大于等于父类的方法,重载和修饰符无关。
4.重写不可以抛出父类没有抛出的一般异常,可以抛出运行时异常。
第三节 JAVA继承的初始化顺序
1.初始化父类再初始化子类
2.先执行初始化对象的属性,再执行构造方法中的初始化
以这段代码为例,Animal 父类 Dog子类,Dog dog=new Dog();仅仅创建了子类对象,但其父类Animal子类Dog的构造方法都执行了,会先执行父类的构造方法,再创建子类的对象。父类对象——属性初始化——构造方法,然后子类对象——属性初始化——构造方法。当我们创建一个子类对象时,会先创建父类对象的初始化,再初始化父类的构造方法,然后是子类对象属性初始化和构造方法初始化。在这里我想强调的是:假如Test测试代码中只new了一个子类的对象,此时会先执行父类的对象初始化构造方法,再执行子类的构造方法。注意:
1.如果父类是无参构造方法时,子类也是的话可以省略,先父类构造再子类;
2.父类仅一个有参构造时,子类必然是有参构造方法,不能重载。因为重载子类new对象时无参数,父类无参数的话就无法构造;
3.解决办法是父类再添加一个无参构造方法,此时子类可以没有有参方法,也可以在有参的方法后再写一个重载的无参构造法。会根据有参无参选择对应的构造方法。
在子类继承父类的有参构造函数时,super(参数),是构造函数中{}第一条语句,super代表父类,()代表调用父类中的构造函数。super();//有时候这句无参的构造方法会被系统默认隐藏掉,实际上是存在的,只是不显示。super(参数);这是有参构造法
第四节 JAVA中final的使用
final 最终的,不可修改 可修饰
final 类 该类不允许被继承
final 方法 该方法不允许被覆盖或者重写
final 属性 该类的属性不会进行隐式的初始化,类的初始化属性必须有值或在构造方法中赋值,但只能选其一
final 变量 则该变量只能赋一次值,变为常量。
第五节 JAVA中super的应用
super关键字,可以代表父类对象,访问父类的属性 super.age;调用父类的方法 super.eat();
注意:父类对象的属性和子类对象的属性并无关系,是两个属性。当一个类继承与另一个类,子类中没有父类的方法时,用子类的对象调用方法会优先在子类中查找该方法,再到父类中找。当一个方法只在父类中定义时,调用该方法会使用父类中的属性。如果该方法中又调用了其它方法,还是先子类找再父类找。
super在构造方法中的应用
1.子类构造中必须调用其父类的构造方法
2.如果子类的构造方法中没有显示调用父类的构造方法,则系统默认调用父类的无参构造方法 super();隐式调用,如果显示调用方法,必须在子类构造方法中的第一行
3.如果子类构造方法中既没有显示调用父类的构造方法,而父类又没有无参构造方法,则编译出错。
this和super用法总结:
1.this是自身的一个对象,代表对象本身,可理解为指向对象的一个指针
this的用法在java中大体可以分为三种:
a.普通的直接引用,this相当于指向当前对象本身
b.形参与成员名重名,用this来加以区分
c.引用构造函数
2.super可以理解为指向自己超(父)类对象的一个指针,而这个超累指的是离自己最近的一个父类
super也有三种直接用法
a.普通的直接引用,super相当于只想当前对象的父类,可以用super.XX来引用父类的成员
b.子类的成员变量或方法与父类中的成员变量或方法名重名
c.引用构造函数
super(参数):参数也可能为空,应该为构造函数的第一条语句,调用父类的构造函数
thiss(参数):在构造函数的第一条语句,调用本类中另一种形式的构造函数。
第六节 Object类 I
toString()方法
当我们在程序中直接打印一个对象时,输出的是对象的哈希地址。如果想输出对象的属性,可以重写toString方法,在Object里定义的toString()方法,返回对象的哈希code码,(对象地址字符串),可以通过重写toString()方法表示出对象的属性,IDEA 中 alt+fn+insert 快捷方式打开toString方法的重写。
第七节 Object类 II
equals()方法,比较的是对象的引用是否指向同一个内存地址,Dog dog=new Dog();dog其实不是对象,它引用了内存的地址,是间接的引用了对象的地址,操作地址的时候间接的操作了对象的值,一般情况下比较对象的属性值是否一致,当父类的方法解决不了时,我们就要重写equals方法。== 如果比较的是两个引用的值时,比较的也是内存地址。