一、继承的作用

子类继承父类的属性和方法,实现代码的复用;

子类扩充自己的标准,实现精细化的类型定义。

二、子类构造方法的限制

子类在实例化的时候,默认先实例化父类对象,然后再实例化本类对象;

子类构造方法默认调用父类的无参构造方法;

如果父类没有无参构造方法,子类的构造方法需要明确指定调用的父类构造方法。

三、方法的重写

子类重写方法限制:方法名、参数类型、参数个数,必须和父类方法完全一致;

被子类重写的方法不能拥有比父类更为严格的访问控制权限(如父类方法为public,则子类重写方法也必须为public;如父类方法为protected,则子类重写方法只能为public或protected);

重写方法的返回值类型,可以是父类原方法的返回类型的子类(比如,父类方法返回Object,子类重写方法可以返回String)(但是,建议不要修改方法的返回值类型);

四、final关键字的约束限制

使用final修饰的类,不能被继承;

使用final修饰的方法,不能被子类重写(为保护父类关键代码,不被子类修改);

public static final修饰的属性,属于全局常量,全局常量在内存中存储在公共区;

final修饰的属性,一般使用全大写,单词间可通过下划线区分;

final修饰的属性,在定义时必须设置初始值,而且值赋值后不能再被改变。

五、多态性的两种描述形式

1、方法的多态性

方法的重载:同一个类中,相同方法名称,根据传入参数类型、参数个数不同,来实现不同的逻辑处理;

方法的重写:继承关系中,子类重写父类的方法,根据子类的不同,实现不同的逻辑处理;

2、对象的多态性

向上转型(自动完成):父类  父类对象 = 子类实例;

向下转型(强制完成):子类  子类对象 = (子类)父类实例;

六、分析:向上转型、向下转型

1、对于对象的转型,给出以下的经验总结

80%的情况下,只会使用向上转型。因为可以得到参数类型的统一,方便进行传参和数据处理;

5%的情况下,会使用向下转型。目的是向下转型后,调用子类的特殊方法;

15的情况下,不实用转型,直接使用本类对象进行操作。

个性化的操作在一个标准的开发之中应该尽量少出现,因为对象的转型操作里面毕竟有了强制问题,容易带来安全隐患。

2、向上转型的目的:可以得到参数类型的统一,方便进行传参和数据处理

packagecom.study.override;

/**

* 父类:水果类

*/

public classFruit {

publicString getInfo(){

return "Fruit *************";

}

}

/**

* 苹果类

*/

class Apple extendsFruit{

@Override

publicString getInfo() {

return "Apple *************";

}

}

/**

* 橘子类

*/

class Orange extendsFruit{

@Override

publicString getInfo() {

return "Orange *************";

}

}

classTest3{

public static voidmain(String[] args) {

Fruit f1 = newApple();

Fruit f2 = newOrange();

getFruit(f1);    //Apple *************

getFruit(f2);    //Orange *************

}

/**

* 接受统一的参数类型:Fruit

* @param fruit

*/

public static voidgetFruit(Fruit fruit){

System.out.println(fruit.getInfo());;

}

}

3、向下转型的目的:调用子类的特殊方法

只有对象发生了向上转型之后,才能成功的向下转型

packagecom.study.override;

/**

* 父类:水果类

*/

public classFruit {

public voidgetInfo(){

System.out.println("Fruit *************");

}

}

/**

* 子类:苹果类

*/

class Apple extendsFruit{

@Override

public voidgetInfo() {

System.out.println("Apple *************");

}

}

/**

* 子类:橘子类

*/

class Orange extendsFruit{

}

classTest3{

public static voidmain(String[] args) {

Fruit f1 = new Apple(); // 自动进行了向上转型

System.out.println(f1 instanceof Fruit); // true

System.out.println(f1 instanceof Apple); // true

System.out.println(f1 instanceof Orange); // false

//向下转型

Apple a1 =(Apple)f1;

a1.getInfo(); //Apple *************

Fruit f2 = newFruit();

System.out.println(f2 instanceof Fruit); // true

System.out.println(f2 instanceof Apple); // false

System.out.println(f2 instanceof Orange); // false

//向下转型失败

//java.lang.ClassCastException: com.study.override.Fruit cannot be cast to com.study.override.Apple

Apple a2 =(Apple)f2;

a2.getInfo();

}

}

java多态的两种形式_java核心(八):继承与方法重写、final、多态性的两种描述形式...相关推荐

  1. Java:继承之super关键字,继承之私有权限,继承之方法重写,继承之object类,继承之简单工厂模式

    一.继承的概念及用法       继承背后的思想就是        基于已存在的类来构建新类         当从已存在类继承时,就重用了它的方法和属性,还可以添加新的方法和属性来定制新类以应对需求 ...

  2. java小数点后两位 四舍五入_Java中double函数,四舍五入并保留小数点后两位的4种方法,BMI案例...

    今天写了一个小程序,Java 语言的测试BMI[谁不知道"BMI"的自行百度不解释],涉及到了四舍五入并保留小数点后两位,就总结了一下.先给大家看看程序 就是说给大家提供4种方法来 ...

  3. java的异常处理块的形式_Java 异常处理详细解读

    异常(Exception)指的是所有可能造成计算机无法正常处理的情况.发生异常时,将阻止程序的运行,若不妥善处理异常,可能造成计算机死机.经过异常处理,可以保证程序的正常运行,我们把针对不同的异常做妥 ...

  4. java double 小数点后两位小数_Java中double类型的数据精确到小数点后两位

    Java中double类型的数据精确到小数点后两位 多余位四舍五入,四种方法 一: double f = 111231.5585; BigDecimal b = newBigDecimal(f);do ...

  5. java中for break的用法_java break语句的使用方法

    在switch语中,break语句用来终止switch语句的执行.使程序 switch语句后的第一个语句 开始执行. 在Java中,可以为每个代码块加一个括号,一个代码块通常 用大括号{}括起来的一段 ...

  6. Java面向对象之继承,方法重写,super关键字,员工类系列继承题

    在程序中,如果想声明一个类继承另一个类,需要使用extends关键字. 格式: class 子类 extends 父类 {} 继承的好处 1.继承的出现提高了代码的复用性,提高软件开发效率. 2.继承 ...

  7. 【Java】day9--main方法、单例设计模式、继承、方法重写部分知识点总结

    (一)main方法 jvm调用main方法,jvm也是一个程序     main方法详解:         public:公共  保证该类在任何情况下,jvm都对其方法可见.         stat ...

  8. java 调用弗雷_JAVASE(九)面向对象特性之 : 继承性、方法重写、关键字super、

    1.继承性 1.1 为什么要类的继承性?(继承性的好处) ①减少了代码的冗余,提高了代码的复用性: ②更好的扩展性 ③为多态性的使用提供了前提 1.2 继承的格式:A extends B A类叫做子类 ...

  9. JAVA练习5—继承,方法重写

    什么是继承? 继承是从已有的类中派生出新类,新的类能吸收已有类的数据属性和方法,并能扩展新的能力. 继承是面向对象的三大特征之一.(三大特征:封装,继承,多态.) 继承的语法格式: 修饰符 class ...

最新文章

  1. 多选月份的日期选择器_GitHub - ylmyg/SelectionTime: Android下日期选择器,支持范围选择、多选、单选、根据输入天数选择日期...
  2. boost::multi_array相关的测试程序
  3. ubuntu安装mysql_Ubuntu18.04下安装MySQL
  4. android 富文本框架_当微擎框架遇上uniapp,以一当十同时开发十个平台项目
  5. 2018-2019 20165204 20165216 20165220 实验四 外设驱动程序设计
  6. js 高级 constructor构造函数
  7. 下一个十年,什么样的测试会被大厂争抢?
  8. 剑指offer面试题15. 二进制中1的个数(位运算)
  9. 解题报告——-2018级2016第二学期第三周作业
  10. Lua1.0 数据结构
  11. rapidsvn 安装步骤
  12. lamp一键安装包+linux,linux下的lanmp/lamp/lnmp一键安装包
  13. 如何打开计算机控制面板,控制面板怎么打开 快速打开控制面板方法大全-电脑教程...
  14. html实体注册商标,html 注册商标,html 注册商标代码
  15. wifi上行下行速度测试_怎么测试上行速度,直观的测试 WiFi上下行宽带
  16. 绵阳现在买房怕房价跌,不买又怕房价涨!到底是跌是涨?
  17. javascript监听esc按键事件
  18. 萤石把直播嵌在html中,直播组件流程使用说明
  19. 所见即所得的html制作,做一个所见即所得的CSS效果
  20. 打脸质疑者!Mobileye市值冲高,公司CEO说出心声

热门文章

  1. 漫画 | 程 序 员 脱 单 指 南
  2. 超详细 | 21张图带你领略集合的线程不安全
  3. Web 前端自学很苦?来,手把手教你,拿下前端!
  4. 如何使用 SQL Server FILESTREAM 存储非结构化数据?这篇文章告诉你!
  5. 数据科学家是个性感的工作?我信你个鬼!
  6. 拒修电脑后,妹子又约我学机器学习,好烦(甜)!
  7. 一拍即合、一见钟情之后,智慧城市的“福利”来啦……
  8. “智企云中享“,首届SAP中国云大会召开
  9. webview键盘自适应_黑爵毛茸茸机械键盘:感受来自治愈系的暖萌
  10. SpringBoot集成Myabtis