java多态的两种形式_java核心(八):继承与方法重写、final、多态性的两种描述形式...
一、继承的作用
子类继承父类的属性和方法,实现代码的复用;
子类扩充自己的标准,实现精细化的类型定义。
二、子类构造方法的限制
子类在实例化的时候,默认先实例化父类对象,然后再实例化本类对象;
子类构造方法默认调用父类的无参构造方法;
如果父类没有无参构造方法,子类的构造方法需要明确指定调用的父类构造方法。
三、方法的重写
子类重写方法限制:方法名、参数类型、参数个数,必须和父类方法完全一致;
被子类重写的方法不能拥有比父类更为严格的访问控制权限(如父类方法为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、多态性的两种描述形式...相关推荐
- Java:继承之super关键字,继承之私有权限,继承之方法重写,继承之object类,继承之简单工厂模式
一.继承的概念及用法 继承背后的思想就是 基于已存在的类来构建新类 当从已存在类继承时,就重用了它的方法和属性,还可以添加新的方法和属性来定制新类以应对需求 ...
- java小数点后两位 四舍五入_Java中double函数,四舍五入并保留小数点后两位的4种方法,BMI案例...
今天写了一个小程序,Java 语言的测试BMI[谁不知道"BMI"的自行百度不解释],涉及到了四舍五入并保留小数点后两位,就总结了一下.先给大家看看程序 就是说给大家提供4种方法来 ...
- java的异常处理块的形式_Java 异常处理详细解读
异常(Exception)指的是所有可能造成计算机无法正常处理的情况.发生异常时,将阻止程序的运行,若不妥善处理异常,可能造成计算机死机.经过异常处理,可以保证程序的正常运行,我们把针对不同的异常做妥 ...
- java double 小数点后两位小数_Java中double类型的数据精确到小数点后两位
Java中double类型的数据精确到小数点后两位 多余位四舍五入,四种方法 一: double f = 111231.5585; BigDecimal b = newBigDecimal(f);do ...
- java中for break的用法_java break语句的使用方法
在switch语中,break语句用来终止switch语句的执行.使程序 switch语句后的第一个语句 开始执行. 在Java中,可以为每个代码块加一个括号,一个代码块通常 用大括号{}括起来的一段 ...
- Java面向对象之继承,方法重写,super关键字,员工类系列继承题
在程序中,如果想声明一个类继承另一个类,需要使用extends关键字. 格式: class 子类 extends 父类 {} 继承的好处 1.继承的出现提高了代码的复用性,提高软件开发效率. 2.继承 ...
- 【Java】day9--main方法、单例设计模式、继承、方法重写部分知识点总结
(一)main方法 jvm调用main方法,jvm也是一个程序 main方法详解: public:公共 保证该类在任何情况下,jvm都对其方法可见. stat ...
- java 调用弗雷_JAVASE(九)面向对象特性之 : 继承性、方法重写、关键字super、
1.继承性 1.1 为什么要类的继承性?(继承性的好处) ①减少了代码的冗余,提高了代码的复用性: ②更好的扩展性 ③为多态性的使用提供了前提 1.2 继承的格式:A extends B A类叫做子类 ...
- JAVA练习5—继承,方法重写
什么是继承? 继承是从已有的类中派生出新类,新的类能吸收已有类的数据属性和方法,并能扩展新的能力. 继承是面向对象的三大特征之一.(三大特征:封装,继承,多态.) 继承的语法格式: 修饰符 class ...
最新文章
- 多选月份的日期选择器_GitHub - ylmyg/SelectionTime: Android下日期选择器,支持范围选择、多选、单选、根据输入天数选择日期...
- boost::multi_array相关的测试程序
- ubuntu安装mysql_Ubuntu18.04下安装MySQL
- android 富文本框架_当微擎框架遇上uniapp,以一当十同时开发十个平台项目
- 2018-2019 20165204 20165216 20165220 实验四 外设驱动程序设计
- js 高级 constructor构造函数
- 下一个十年,什么样的测试会被大厂争抢?
- 剑指offer面试题15. 二进制中1的个数(位运算)
- 解题报告——-2018级2016第二学期第三周作业
- Lua1.0 数据结构
- rapidsvn 安装步骤
- lamp一键安装包+linux,linux下的lanmp/lamp/lnmp一键安装包
- 如何打开计算机控制面板,控制面板怎么打开 快速打开控制面板方法大全-电脑教程...
- html实体注册商标,html 注册商标,html 注册商标代码
- wifi上行下行速度测试_怎么测试上行速度,直观的测试 WiFi上下行宽带
- 绵阳现在买房怕房价跌,不买又怕房价涨!到底是跌是涨?
- javascript监听esc按键事件
- 萤石把直播嵌在html中,直播组件流程使用说明
- 所见即所得的html制作,做一个所见即所得的CSS效果
- 打脸质疑者!Mobileye市值冲高,公司CEO说出心声
热门文章
- 漫画 | 程 序 员 脱 单 指 南
- 超详细 | 21张图带你领略集合的线程不安全
- Web 前端自学很苦?来,手把手教你,拿下前端!
- 如何使用 SQL Server FILESTREAM 存储非结构化数据?这篇文章告诉你!
- 数据科学家是个性感的工作?我信你个鬼!
- 拒修电脑后,妹子又约我学机器学习,好烦(甜)!
- 一拍即合、一见钟情之后,智慧城市的“福利”来啦……
- “智企云中享“,首届SAP中国云大会召开
- webview键盘自适应_黑爵毛茸茸机械键盘:感受来自治愈系的暖萌
- SpringBoot集成Myabtis