package com.oop.demo06; public class Student extends Person{ public void run(){ System.out.println("son"); } public void eat(){ System.out.println("eat"); } } /* 多态注意事项: 1.多态是方法的多态,属性没有多态 2.父类和子类,有联系 类型转换异常ClassCastException!(出现这个代表对象类型转换出现问题) 3.存在条件:继承关系,方法需要重写,父类引用指向子类对象! Father f1 = new Son(); 1.static 方法,属于类,它不属于实例 2.final 常量;(放在常量池中无法修改) 3.private方法;(私有的也无法重写) */
package com.oop; import com.oop.demo05.A; import com.oop.demo05.B; import com.oop.demo06.Person; import com.oop.demo06.Student; /* * 封装的意义 * 1.提高程序的安全性 * 2.隐藏代码的实现细节 * 3.统一接口 * 4.系统的可维护性增加了 * */ public class Application { public static void main(String[] args) { //一个对象的实际类型是确定的,但是可以指向的引用类型就不确定了 //new Student(); //new Person(); //都是学生,但是同样表现出来有多种状态,这就叫多态 //对象指向的引用类型是不确定的, //Student能调用的方法都是自己的或是继承父类的! Student s1 = new Student(); //Person父类型,可以指向子类,但是不能调用子类独有的方法。 Person s2 = new Student();//父类的引用指向子类的类型 Object s3 = new Student(); //★对象能执行哪些方法,主要看对象左边的类型,和右边关系不大! //如果只有person类中有run方法则S2执行person类中的run方法,如果student重写了run方法,则s1、s2都执行重写后的方法,输出son s2.run();//子类重写了父类的方法,执行子类的方法 s1.run(); //s2.eat();会报错,因为s2的类型是person类,person类中还没有eat方法,如果有的话,那子类没有重写方法就调用父类的,重写了方法就调用子类的 //((Student) s2).eat();//这里是将s2类型强制转换成Student类型了 } }
标签:12,s2,多态,面向对象,Student,子类,重写,方法 From: https://www.cnblogs.com/sankouyitouju/p/18110378