老黑讲Java之面向对象继承
1、泛化的意义
泛化是继承的源头,理解了泛化,就不难搞懂继承。泛化是提炼出每个类中的公共部分作为父类,子类继承父类后,子类就拥有了父类的特性。
2、extends关键字
1、只用写上extends关键字才可以实现继承;
2、子类继承父类后,子类可以使用成员变量及成员方法,同时子类可以定义自己的成员变量和成员方法;
3、Java不支持多重继承,一个类只能继承一个父类,一个父类可以有多个子类,示例代码如下:
//父类
public class People {
String name;
int age;
String gender;
public People() {
}
public People(String name, int age, String gender) {
super();
this.name = name;
this.age = age;
this.gender = gender;
}
}
//子类
public class Programmer extends People {
public void ProgrammingCode(String language) {
}
}
3、子类继承父类,父类必须有一个无参的构造方法
1、子类的构造方法必须通过super关键字调用父类的构造方法,这样可以初始化继承父类的成员变量;
2、子类的构造方法没有调用父类的构造方法,Java编译器会自动的加入对父类无参构造方法的调用,如果父类没有无参构造方法,则会出现编译错误。
public class Programmer extends People {
public Programmer(){
super();//编译器自动添加,调用父类无参的构造方法,父类没有无参构造方法则会出现编译错误
}
public void ProgrammingCode(String language) {
}
}
或者可以这么写构造方法:
public class Programmer extends People {
double salary;
public Programmer(String name, int age, String gender, double salary){
super(name, age, gender);
}
public void ProgrammingCode(String language) {
}
}
4、父类的引用可以指向子类的对象
1、父类类型的引用可以指向子类的对象,即,一个子类的对象可以向上造型为父类的类型,代码如下:
People people = new Programmer ();
或者
People people = new Programmer("老黑",18,"男",3000);
5、父类的引用只能访问父类的成员,不能访问子类自定义的成员
People people = new Programmer("老黑",18,"男",3000);
System.out.println(people.name);
System.out.println(people.salary);//编译错误