Javaの研究ノート - ポリモーフィズム

4のJavaオブジェクト指向特性

パッケージの継承多型(要約)

ポリモーフィズム

異なる形態(の同一性)の数に反映され、同じオブジェクトが行為は、異なる効果を示すであろう
所望の効果多型既存の継承を実現するために

反映:
  親クラス・オブジェクトの基準点の1種類をサブクラス化する
   人教師新しい新しいPを=();
  2.このメソッドのみ呼び出すことができ、または参照が親クラスで定義された属性
  親クラスのメソッドは、書き換え可能なサブクラス化する場合は3 、次に検索方法の実行の結果は、書き換え後、そのサブクラスの結果である
   親クラス及び親クラス属性プロパティのサブクラスは、同じ名前を実行する場合は
   、同じ名前(過負荷)の親クラスとサブクラスは、サブクラスを実行する場合の方法を書き換え後の方法
  あなたが独自のサブクラスのメンバー呼び出したい場合は4を
   金型(上向き/下向きの移行)を成形(強制転換を)
  5.成形(強制下降遷移)するとき、実行発生する可能性があります異常な
   金型のClassCastExceptionが異常な形状
   キーワードinstanceofは異常な形状を回避したい場合は、決定するために使用することができる
   クラスのinstanceofオブジェクトを

ケース

//动物类
public class Animal {
    public String name = "Animal的name属性";

    public void eat(){
        System.out.println("animal的吃饭方法");
    }
    public void sleep(){
        System.out.println("animal的睡觉方法");
    }
}

//人类
public class Person extends Animal{
    public String name = "person的name属性";
    public void eat(){
        System.out.println("person的吃饭方法");
    }
    public void sleep(){
        System.out.println("人类的睡觉方法");
    }
    public void talk(){
        System.out.println("人类的说话方法");
    }
}

//猪
public class Pig extends Animal{
    public String name = "pig的name属性";
    public void sleep(){
        System.out.println("猪的睡觉方法");
    }
}

//学生
public class Student extends Person {
    public String name = "student的name属性";
    public void talk(){
        System.out.println("学生遵守礼貌 应该好好说话");
    }
    public void study(){
        System.out.println("好好学习 天天向上");
    }
}

//老师
public class Teacher extends Person{
    public String name = "teacher的name属性";
    public void eat(){
        System.out.println("做老师的通常不按时吃饭");
    }
    public void teach(){
        System.out.println("做老师的独有方法 一般人不会讲课 我会");
    }
}

public class Test {
    public static void main(String[] args){
        //1.创建对象
        //这个真是的老师 体现出来的身份是一个人的身份
//        Person p = new Teacher();//自动向上转型  Teacher--->Person
//        p.eat();
//        p.sleep();
//        p.talk();
//        //如果想要调用子类独有的属性或方法
//        //需要将类型还原会真实类型    强制类型转化  造型  向上转型  向下转型
//        Teacher t = (Teacher)p;
//        t.eat();
//        t.sleep();
//        t.talk();
//        t.teach();

        Object o = new Teacher();
        o.hashCode();
        o.toString();
        System.out.println("------------------------");
        Animal a = (Animal)o;
        a.hashCode();
        a.toString();
        System.out.println(a.name);//animal的name属性
        a.sleep();//没有重写  person重写了 person的sleep
        a.eat();//执行teacher的eat方法
        System.out.println("-----------------------");
        Person p = (Person)o;
        p.hashCode();
        System.out.println(p.name);//person的name属性
        p.sleep();//人类的睡觉
        p.eat();//老师的吃饭
        p.talk();//人类的说话
        System.out.println("----------------------");
        Teacher t = (Teacher)o;
        System.out.println(t.name);//老师的name
        t.eat();//老师的吃饭
        t.sleep();//人类睡觉
        t.talk();//人类说话
        t.teach();//老师的独有方法
        System.out.println("-------------------");
        if(o instanceof Person){//对象是否属于后面类型
            System.out.println("类型匹配  可以造型");
//            Student s = (Student)o;//运行时异常 ClassCastException
//            s.study();
        }else{
            System.out.println("对不起 类型不匹配 不帮您造型啦 否则会出问题");
        }

    }
}


公開された30元の記事 ウォンの賞賛0 ビュー6645

おすすめ

転載: blog.csdn.net/qq_37710756/article/details/103543710