多态练习1

多态

意义:

  1. 同一个对象被造型为不同的类型时,此时me就可以掉用三种方法

    我 me = new()
    讲师 o1 = me;
    妈妈 o2 = me;
    老婆 o3 = me;
    
    class 我 implments 讲师,妈妈,老婆{ //我实现了讲师、妈妈、老婆接口必须重写3个方法
    	void 讲课(){ sout(讲课) }
    	void 揍孩子(){ sout(揍孩子) }
    	void 收财务(){ sout(收财务) }
    }
    interface 讲师{
    	void 讲课();
    }
    interface 妈妈{
    	void 揍孩子();
    }
    interface 老婆{
    	void 收财务();
    }
    
  2. ​ 行为多态,同一类型的引用指向不同对象,抽象方法都是多态的

人 p1 = new 理发师()  //向上造型
人 p2 = new 医生()
人 p3 = new 导演()
p1.剪头() 
p2.开刀()
p3.停止拍戏()    
abstract  class{
       void cut();
}
class 理发师 extends{
    void cut(){ 箭头 }
}
class 医生 extends{
    void cut(开刀 )
}
class 导演 extends{
    void cut( 停止拍戏 )
}

例子

下面有动物类Animal、人类Person、猪类Pig、学生类Student、老师类Teacher、Test测试类关系图如下

类关系图

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

    public void eat(){
        System.out.println("人类的吃饭方法");
    }
    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 = "学生的name属性";
    public void talk(){
        System.out.println("学生讲礼貌好好说话");
    }
    public void study(){
        System.out.println("好好学习天天向上");
    }
}
public class Teacher extends Person{
    @Override
    public void eat() {
        System.out.println("老师通常不按时吃饭");
    }
    public void teach(){
        System.out.println("老师会教课,其他人不会");
    }
}

下面是Test测试方法

public class Test {
    public static void main(String[] args) {
		Person p = new Teacher(); //向上造型了
        p.eat();
        System.out.println(p.name);
        p.sleep();
        p.talk();
	}
}
过程分析:Person p = new Teacher() 向上造型了,能点出来(编译的)是Person类型。运行看子类有没有重写父类方法
结果是
老师通常不按时吃饭 ---> eat()被teacher类重写
人类的name属性 
人类的睡觉方法 --->teacher没有重写Person类的sleep方法,就向上找父类Person的sleep方法
人类的交流方法 --->teacher没有重写Person类的talk方法,就向上找父类Person的talk方法

在这里插入图片描述


Test2类代码如下

public class Test2 {
    public static void main(String[] args) {
        Object o = new Teacher();  //taecher对象指向Object引用
        o.hashCode(); 
        o.toString();
        Animal aa = (Animal) o;
        System.out.println(aa.name);
        aa.eat();
        aa.sleep();
        }
 }       
输出的结果为
Animal的name属性  --->属性没有继承关系
老师通常不按时吃饭 --->teacher类中有eat()就调用
人类的睡觉方法    ---->teacher类中没有sleep()就在其父类Person中找sleep(),找到了就输出sleep()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值