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("对不起 类型不匹配 不帮您造型啦 否则会出问题");
}
}
}