继承
Java不支持多继承,一个类只能继承一个类。
- 子类共享父类中的非私有属性
- 子类可以拥有父类中的非私有方法
super关键字
1.使用super关键字调用父类属性,super关键字可省略
super.父类属性
2.使用super调用父类的构造方法
如果使用super(),则是调用父类的无参构造方法;如果super(参数),则是调用父类有参数的构造方法。
public class Person{ //父类
private String name;
private int age;
public Person(){
public Person(String name,int age){
this.name = name;
this.age = age;
}
}
class Student extends Person{ //子类
//子类构造方法
public Student(){
super("sky", 26); //调用父类构造方法
}
}
3.子类和父类构造方法的实行顺序
(1)子类默认调用父类的无参构造方法,也就是说,子类的构造方法中会默认调用 super(),并且在构造方法的第一行。
(2)如果子类只提供有参的构造方法,则必须在子类的构造方法中调用父类的构造方法。
(3)执行完父类的构造方法后,再调用本类中的构造方法。
package day01;
public class Student extends Person {
public Student(){
super("sky", 26);
System.out.println("子类有参构造方法");
}
public static void main(String[] args){
Student stu = new Student();
}
}
class Person {
private String name;
private int age;
public Person(){
System.out.println("父类无参构造方法");
}
public Person(String name, int Age){
this.name = name;
this.age = age;
System.out.println("父类有参构造方法");
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
}
结果:
父类有参构造方法
子类有参构造方法
多态
- 重载
覆盖:子类重写父类中的方法
即子类中的方法与父类中的方法保持一致,但是方法的修饰符一定要大于等于父类中方法的修饰符(???修饰符级别)向上转型
父类 对象 = new 子类();
如A是父类,B类继承了A类,向上转型可以表示为:
A a = new B();
如果父类和子类中有同样的方法时,a.方法()会调用子类中的方法,因为父类引用a指向的是子类对象new B(),所以实际上还是调用的子类的方法。
如果子类中有特有的方法时,通过向上转型,就会丢失掉子类特有的方法。
- 向下转型
父类 对象1 = new 子类();
子类 对象2 = (子类)对象1;
把指向子类对象的父类引用赋值给子类引用叫做向下转型,需要用到强制转换。