java 多态对象_JAVA 面向对象中的多态

多态是继封装、继承之后,面向对象的第三大特性。

现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态。

Java作为面向对象的语言,同样可以描述一个事物的多种形态。如Student类继承了Person类,一个Student的对象便既是Student,又是Person。

Java中多态的代码体现在一个子类对象(实现类对象)既可以给这个子类(实现类对象)引用变量赋值,又可以给这个子类(实现类对象)的父类(接口)变量赋值。

如Student类可以为Person类的子类。那么一个Student对象既可以赋值给一个Student类型的引用,也可以赋值给一个Person类型的引用。

最终多态体现为父类引用变量可以指向子类对象。

多态的前提是必须有子父类关系或者类实现接口关系,否则无法完成多态。

在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法。

多态是同一个行为具有多个不同表现形式或形态的能力。

多态就是同一个接口,使用不同的实例而执行不同操作。

1 public classFather {2 public voidsay() {3 System.out.println("This is Father's word");4 myhobby();5 }6

7 public voidmyhobby() {8 System.out.println("This is Father's hobby");9 }10 }

1 public class Son extendsFather {2

3 privateString sonname;4

5 publicString getSonname() {6 returnsonname;7 }8

9 public voidsetSonname(String sonname) {10 this.sonname =sonname;11 }12

13 public voidsay(){14 System.out.println("This is Son's word");15 }16

17

18 public voidmyhobby(String sonname){19 System.out.println("This's Son's hobby for String " +sonname);20 }21

22 }

我是测试类

public classtestDuotai {public static voidmain(String[] args) {

Father father1= newSon();

System.out.println("实例化一个Son对象,用父亲接收");

father1.say();

father1.myhobby();

Son son= newSon();

System.out.println("实例化一个Son对象,用Son接收");

son.say();

son.myhobby();

son.myhobby(son.getSonname());

}

}

1c765b275f45fa9e74bf0214331b2295.png

Java实现多态有三个必要条件:继承、重写、向上转型。

继承:在多态中必须存在有继承关系的子类和父类。

重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。

向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。

只有满足了上述三个条件,我们才能够在同一个继承结构中使用统一的逻辑实现代码处理不同的对象,从而达到执行不同的行为。

对于Java而言,它多态的实现机制遵循一个原则:

当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法。

基于接口实现的多态Demo

public interface Car {

String getName();

int getPrice();

}

public class BMW implements Car {

@Override

public String getName() {

return "宝马";

}

@Override

public int getPrice() {

return 30;

}

}

public class BenZ implements Car {

@Override

public String getName() {

return "奔驰";

}

@Override

public int getPrice() {

return 50;

}

}

public class jieKouDemo {

public static void main(String[]args){

CarShop shop=new CarShop();

Car car1 =new BMW();

Car car2= new BenZ();

//卖出一辆宝马

shop.sellCar(car1);

//卖出一辆奇瑞QQ

shop.sellCar(car2);

System.out.println("总收入:"+shop.getMoney());

}

}

ac3d718389157291877dd7f35029cfd5.png

36a66843f0f3edd47e36079c9ed6de58.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值