Home

韧桂

思考,总结

面向对象的特征三多态性

代码一

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