继承、重写、自动转型和多态

   继承的关键字是extends,如果一个类A继承了另外一个类B,那么称A是B的子类,B是A的父类,并且A继承了B的所有属性和方法(除了构造方法),但在子类的构造方法中会默认的去调用父类的构造方法 super();。方法的重写是指在子类中定义一个与父类中的方法名、参数、返回值均相同的,但访问权限只能扩大不缩小,方法体不同的方法。对于方法的重写与重载的区分,重写是在继承的子类中,重载是在同一个类中,且重载的方法名相同,但参数必须不同。
    自动转型的格式:父类名 对象名 = new 子类名(); 先是构造了一个子类的对象然后将其转型为父类类型,自动转型后,如果子类重写了父类中的方法,转型后的对象调用的就是子类中的重写方法,如果子类没有重写则调用父类自己的方法;转型后的对象不能调用子类特有的方法。
    多态是指多个相同类型的对象调用相同的方法的时候,由于继承和重写,使得其有不同的方法体去实现。
代码:
//定义一个Student父类
public class Student {
public Student(){
System.out.println("实现的是Student类中的构造方法");
}
String name;
public void setName(String name){
this.name = name;
}
public void study(){
System.out.println(name+"学生在学习");
}
public void play(){
System.out.println(name+"在休息");
}
}

//定义一个 UniversityStudent类来继承 Student类
public class UniversityStudent extends Student{
//将父类中的study方法重写
public void study(){
System.out.println(this.name+"在大学学习");
}
//定义一个子类特有的work方法
public void work(){
System.out.println(this.name+"找工作");
}
}


public class Main {
public static void main(String args[]){
UniversityStudent st1 = new UniversityStudent();
st1.setName("张三"); //子类对象继承了父类的属性和方法
st1.study();
st1.play();
st1.work();
Student st2 = new UniversityStudent();//自动转型
st2.setName("李四");
st2.study(); // Student的对象st2调用的是子类重写的study方法
st2.play();
//st2.work();      自动转型后的Student类的对象st2不能调用子类特有的方法
Student st3 = new Student();
st3.setName("王五");
st3.study(); //Student类的对象 st2.study(); st3.study()实现了多态
st3.play();
}
}

猜你喜欢

转载自939647516.iteye.com/blog/1824883
今日推荐