JAVA多态

标签: 多态 JAVA 多态转型(向上向下
17人阅读 评论(0) 收藏 举报
分类:

概念:

“多态”:现实中的一类事物的多种形态:
一类事物    ----->      具体形态
  树 -----> “杨树”
  树       -----> “柳树”
  花 -----> “玫瑰”
  花 -----> “百合”
Java中表现:使用父类类型的引用,指向它的某个子类的对象;
Student stu = new Student();
//多态
Person p = new Student();
左边:父级(爷级),可以是类、抽象类、接口
右边:子级对象
左右两边必须要有“继承”/“实现”关系。
多态_多态的代码体现
class Car{}
class BenZ extends Car{}
测试代码:
//多态形式
Car c = new BenZ();
说明:创建的是子类对象,只是将子类类型的引用隐式的转换为父类类型,转换后,c变量反而被限
制在“父类”范围内,访问的成员只能是父类中的。
多态中成员的访问
多态时,访问的成员只能是“父类的”(在父类中必须要有)
多态时,不能访问“子类的特有成员”;
多态中访问被子类覆盖的成员属性的特点
class Fu{
int num = 10;
}
class Zi extends Fu{
int num = 20;
}
测试代码:
//多态
Fu f = new Zi();
System.out.println(f.num);//10
注意:
class Fu{
}

class Zi extends Fu{
int num = 20;
}
测试代码:
//多态
Fu f = new Zi();
System.out.println(f.num);//编译时异常。num在父类中没有定义。
编译看左边(编译时,访问的成员在父类中必须要有),运行时看左边(运行时,访问的也是父类的)

多态中访问被子类重写的成员方法的特点
class Fu{
public void show(){
System.out.println("a");
}
}
class Zi extends Fu{
public void show(){
System.out.println("b");
}
}
测试代码:
Fu f = new Zi();
f.show();//b

编译看左边,运行看右边(执行的是子类重写的)

多态中成员的访问_总结

1).多态时访问的总体规则:
多态时访问的成员,在父类中必须存在(定义、声明),访问的都是父
类的。只有当子类重写父类方法时,访问的是子类的(原因:方法的动态绑定

先在子类中找)。

多态_多态的好处和局限

1).多态的形式:
父类  =  new  子类对象();
父抽象类  = new  子类对象();
父接口    = new  子类对象();
2).接口多态:
interface IA{
public void show();
}
class Zi implements IA{
public void show(){
System.out.println("a");
}
}
测试代码:
IA a = new Zi();
a.show();//执行的是子类重写的show().
3).多态的好处:
公司有一辆轿车,招一名司机,开车。
车:
属性:
行为:run(),stop()
轿车类 extends 车
属性:
行为:
大客车 extends 车
属性:
行为:
三蹦子  extends 车
属性:
行为:
司机类:
属性:
行为:开车(轿车 jc)
                         开车(大客车 dkc)
...每当来一辆新车,司机类都要添加一个新方法,不利于更新。
更改为以下形式,后期再增加车,只需要那个车继承自“车类”即可,这个
方法不用修改。
开车(车 c){//多态:车 c = new 轿车类(); 车 c = new 大客车(); 车 c = 三蹦子();
c.run();
c.stop();
}
测试类:
轿车类 jc = new 轿车类();
司机类 sj = new 司机类();
sj.开车(jc);
大客车  dkc = new 大客车();
sj.开车(dkc);//sj.开车(new 大客车());
三蹦子 sbz = new 三蹦子();

sj.开车(sbz);

4).多态的弊端:多态时不能访问子类特有成员。

多态的向上转型和向下转型
1).向上转型:
回顾之前基本类型:
int a = 10;
long b = a;//隐式转换--向上提升
多态:
Person  p = new Student();//隐式的向上转型
多态时,向上转型后:不能访问子类特有成员,
               如果想访问子类特有成员,可以向下转型。
2).向下转型:
Person p = new Student();
Student stu = (Student)p;
注意:向下强转时,必须转换为之前指向的类型,不能转换为其它子类类型:
Person p = new Student();
Person p2 = new Teacher();
Student stu = (Student)p;//OK的
Student stu2 = (Student)p2;//编译成功,运行时异常:ClassCastException
3).向下转型存在风险,建议:先判断,再转换
Person p = new Student();
if(p instanceof Student){//强烈建议:在向下转型前先做判断,然后在转换,使程序健壮。
Student stu = (Student)p;
}
查看评论

Java核心技术 第一章 接口、继承与多态

-
  • 1970年01月01日 08:00

java多态

  • 2012年08月29日 12:41
  • 565KB
  • 下载

Java多态的讲解

  • 2017年07月01日 20:10
  • 2KB
  • 下载

Java多态实现

  • 2012年08月29日 13:02
  • 45KB
  • 下载

C++和Java多态的区别

  • 2016年11月27日 10:44
  • 955KB
  • 下载

JAVA多态图文详解ppt

  • 2018年03月20日 16:46
  • 428KB
  • 下载

JAVA多态 扩展性及 转型

//仅作为学习笔记 /* 1,多态的体现 父类的引用指向自己的子类对象 父类的引用也可以接收自己的子类对象 2,多态的前提 必须是类与类之间有关系,要么继承 要么实现 通常还有一个前提...
  • wu_lai_314
  • wu_lai_314
  • 2013-03-04 00:27:14
  • 764

Java 多态缺陷

Java 多态缺陷 ( 1.缺陷 : “覆盖”私有方法 output:    print A private方法被自动认为是final方法,而且对子类是屏蔽的。因此,在...
  • mwq30123
  • mwq30123
  • 2014-06-04 10:42:49
  • 543

探探对java多态的理解

1、面向对象的三大基本特征:封装、继承、多态2、多态是指:父类引用指向子类对象,在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。3、实现多态的三要素:继承 重写 父类引用指向子类...
  • jack_shuai
  • jack_shuai
  • 2018-02-24 14:49:39
  • 419

Java基础中的多态理解

个人对Java中多态的部分理解,多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用...
  • u013682392
  • u013682392
  • 2015-07-29 10:45:34
  • 749
    个人资料
    等级:
    访问量: 50
    积分: 49
    排名: 180万+
    文章存档