继承概念及作用:
将不同类中可能有的共同属性和方法,抽取出来定义成一个类。
实现了代码的重用,减少代码的冗余,易于维护。
基础知识
java是单继承,只能有一个父类,不允许多继承。
子类在创建对象的时候,会首先调用父类的构造方法,然后再调用自己的构造方法。
当父类没有提供无参的构造函数时,子类的构造函数必须显式的调用父类的构造函数。使用super()
如果父类提供了无参的构造函数,子类默认的调用父类无参构造函数。
代码
package object;
public class Extends {
// Extends(){
// System.out.println("父类的无参构造函数");
// }
Extends(String a){
System.out.println("父类的有参构造函数");
}
}
class aa extends Extends{
aa(){
super("aaa");
System.out.println("子类的无参构造函数");
}
aa(String a){
super("a");
System.out.println("子类的有参构造函数");
}
public static void main(String[] args) {
new aa();
}
}
输出结果:
父类的有参构造函数
子类的无参构造函数
super()与this()
this的用法
1,形参与成员名重名时
2,直接引用当前对象本身
3,引用本类的构造方法,写在第一行
super的用法
1,子类的成员变量名或方法名与父类的成员变量名或父类方法名重名,用super区分
2,引用父类的构造方法,写在第一行
3,引用父类的成员
一图理解,上代码
package object;
class Person {
public static void prt(String s) {
System.out.println(s);
}
//构造方法(1)
Person() {
prt("父类·无参数构造方法: "+"A Person");
}
//构造方法(2)
Person(String name) {
prt("父类·含一个参数的构造方法: "+"A person's name is " + name);
}
}
class Chinese extends Person {
Chinese() {
super(); // 调用父类构造方法(1)
prt("子类·调用父类无参数构造方法" + "A chinese coder");
}
Chinese(String name) {
super(name);// 调用父类具有相同形参的构造方法(2)
prt("子类·调用父类”含一个参数的构造方法“: "+"his name is " + name);
}
Chinese(String name, int age) {
this(name);// 调用具有相同形参的构造方法(3)-->调用(2)
prt("子类:调用子类具有相同形参的构造方法:his age is " + age);
}
public static void main(String[] args) {
Chinese cn = new Chinese();
cn = new Chinese("people");
cn = new Chinese("people", 18);
}
}
输出结果
父类·无参数构造方法: A Person
子类·调用父类无参数构造方法A chinese coder
父类·含一个参数的构造方法: A person's name is people
子类·调用父类”含一个参数的构造方法“: his name is people
父类·含一个参数的构造方法: A person's name is people
子类·调用父类”含一个参数的构造方法“: his name is people
子类:调用子类具有相同形参的构造方法:his age is 18