面向对象的特征三多态性
代码一
package eight;
public class Person {
private String name;
private int age;
protected double vision;
protected double stature;
int id = 1001;
public Person(){
this.vision = 5.0;
this.stature = 170;
}
public Person(double vision){
this();
this.vision = vision;
}
public Person(int id,double stature){
this(id);
this.stature = stature;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age = age;
}
public void eat(){
System.out.println("吃饭");
}
public void walk(){
System.out.println("走路");
}
private int sleep(){
return 0;
}
}
代码二
package eight;
public class Man extends TestPeople{
private boolean smoking;
public Man(){
super();
}
public Man(boolean smoking){
super();
this.smoking = smoking;
}
public boolean isSmoking(){
return smoking;
}
public void setSmoking(boolean smoking){
this.smoking = smoking;
}
public void walk(){
System.out.println("男生马拉松");
}
public void eat(){
System.out.println("男生盘火锅");
}
public void entertainment(){
System.out.println("男生请客");
}
}
代码三
package eight;
public class Woman extends TestPeople{
private boolean isBeauty;
public Woman(){
super();
}
public Woman(boolean isBeauty){
super();
this.isBeauty = isBeauty;
}
public boolean isBeauty(){
return isBeauty;
}
public void setBeauty(boolean isBeauty){
this.isBeauty = isBeauty;
}
public void walk(){
System.out.println("女生有氧运动");
}
public void eat(){
System.out.println("女生盘水果");
}
public void shopping(){
System.out.println("女生购物");
}
}
代码四
package eight;
/**
* 面向对象的特征三:多态性
* 1.多态性指的是什么? 多态性,可以理解为一个事物的多种表型形态。
* 1)方法的重载与重写。
* 2)子类对象的多态性。
* 2.子类对象的多态性使用的前提:①要有类的继承 ②要有子类对父类方法的重写。
* 3.程序运行分为编译状态和运行状态。
* 对于多态性来说,编译时,”看左边“,将此引用变量理解为父类的类型
* 运行时,”看右边“,关注于真正对象的实体:子类的对象。那么执行的方法就是子类重写的。
4.子类对象的多态性,并不使用于属性
*/
public class TestPeople1 {
public static void main(String[] args) {
TestPeople p = new TestPeople();
p.eat();
p.walk();
Man m = new Man();
m.eat();
m.walk();
System.out.println();
//子类对象的多态性:父类的引用指向子类对象。
TestPeople p1 = new Man();
//虚拟方法调用:通过父类的引用指向子类的对象实体,当调用方法时,实际执行的是子类重写父类的方法。
p1.eat();
p1.walk();
// p1.entertainment();//在TestPeople中未定义,故调不了
TestPeople p2 = new Woman();//向上转型
p2.eat();
p2.walk();
// p2.shopping();
Woman w = (Woman)p2;//向下转型,使用强转符()
w.shopping();
// //java.lang.ClassCastException
// Woman w1 = (Woman)p1;
// w1.shopping();
//instanceof:
//格式:对象a instanceof 类A:判断对象a是否是类A的一个实例。是的话返回true,否则返回false。
if(p1 instanceof Woman){
Woman w1 = (Woman)p1;
w1.shopping();
}
if(p1 instanceof Man){
Man m1 = (Man)p1;
m1.entertainment();
}
if(p1 instanceof TestPeople){
System.out.println("你好");
}
}
public void show(TestPeople p){//TestPeople p = new Man();
}
}
韧桂 2019-12-25