来自一个前端的学生对JAVA多态的笔记
吐槽一下,作为一个学习前端的孩子,发布的第一篇文章是为了期末考试转行几天学习学习Java。希望路过的大牛轻喷。
Java多态就是多种表现形式,具体来说,可以用“一个对外的接口,多个内在实现方法”表示。在面向对象理论中,多态是指:同一操作作用于不同的类的对象,将产生不同的执行效果,增加了程序的灵活性。
多态三大重点:继承、重写、向上转型(父类引用指向派生类)。
继承:就是一个子类继承一个父类,就是extends!!!
重写:就是把父类的方法名重写写一遍,方法体变一变就好了。
向上转型:就是子类引用指向派生类对象,既可以使用派生类的功能,也可以抽取父类的特性。就是定义了一个Person父类,定义一个Teacher子类,格式:Person per = new Teacher();
嗯。。。想看懂多态,首先要先学习继承吧,个人观点
上代码吧:
父类:Person
public class Person {
private String name;
public Person() {
System.out.println("这是无参person类的构造方法");
}
public Person(String name) {
System.out.println("这是有参person类的构造方法"+name);
}
public void display() {
System.out.println("这是person类");
}
}
子类:Teacher
public class Teacher extends Person{
public Teacher() {
System.out.println("这是无参teacher类的构造方法");
}
public Teacher(String name) {
System.out.println("这是有参teacher类的构造方法"+name);
}
public void display() { //对person类中display方法的重写
System.out.println("这是teacher类");
}
}
子类的子类(孙子类):Student(为了方便理解吧,学生类和老师类应该是平级的。)
public class Student extends Teacher{
public Student() {
System.out.println("这是无参student类的构造方法");
}
public Student(String name) {
System.out.println("这是有参student类的构造方法"+name);
}
public void display() { //这个也是方法重写吧。。。
System.out.println("这是student类");
}
}
最后写一个测试类:Test
public class Test {
public static void main(String[] args) {
Person p = new Person("per");
p.display();
Person t = new Teacher("tea");
t.display();
Teacher s = new Student("stu");
s.display();
}
}
最后输出结果:
这是有参person类的构造方法per
这是person类
这是无参person类的构造方法
这是有参teacher类的构造方法tea
这是teacher类
这是无参person类的构造方法
这是无参teacher类的构造方法
这是有参student类的构造方法stu
这是student类
解释一下“测试类”:
第一行:首先创建person对象,传参“per”,调用person类有参的构造方法;
第二行:调用Person类中的display方法;
第三行:创建teacher对象,传参“tea”,但是使用父类Person引用,向上转型。所以先输出父类的无参数构造方法,在输出子类的带参的构造方法。
第四行:调用Teacher类的display方法。
第五行:和第三行一样,但是我们Student是子类的子类,所以输出了父类的父类的无参数构造方法,在输出父类无参数的构造方法,在输出子类的带参的构造方法。
第六行:调用Student类的display方法。
为什么子类的对象可以赋给父类引用?
自动实现向上转型,通过Person per = newTeacher();语句,编译器自动将子类的实例转为通用类型Person。