继承与多态
继承;
java中所有类的父类Object
构造方法无法被继承。
方法的覆盖:返回值不同无法构成方法的覆盖。
访问修饰符访问级别:
public>protected>default>private
在覆盖父类的方法时:
子类的覆写方法的修饰符不能低于父类的对应方法的访问修饰符。
如:
public class Animal{
protected void sleep(){
System.out.println("Animal");
}
}
public class Person extends Animal{
private void sleep(){
System.out.println("Person");
}
}
分析:还是按照多态来理解。
假如有这样一个方法
void test(Animal a){
a.sleep();
}
假设编译没问题,对于Animal类型而言,它的sleep方法具有相应的可见性(test方法属于
位于同一个包中的某类)。但如果传给test方法的是Person实例,则根据多态会调用person类的sleep()方法,而该方法却是私有的,无法
调用,这就导致了问题。所以可以反正以上观点。java语言也就规定以上约束。
super关键字
:
在java类中使用super来引用父类的成分
--super可用于访问父类中定义的属性
--super可用于调用父类中定义的成员方法
--super可用于在子类构造器中调用父类的构造器
--super的追溯不仅于直接父类
super()一定放在构造函数的第一行。
构造器
(默认构造器和自定义构造器)
类如果提供了非默认构造函数,则编译器不提供默认构造器,除非在定义类时未指定任何构造器。
如:
public class Base{
public Base(int i){}
}
public class Sub extends Base{
} //该类编译报错,父类没有默认构造器,子类的默认构造器找不到父类的默认构造器
重载:
方法名相同(参数类表不同),只能利用参数类型和参数个数的不同来重写方法。
**方法的覆盖:返回值不同无法构成方法的覆盖。**
证明
为什么重写方法不能依赖返回值的不同。
使用反证法:假如假设成立的话,
父类:
public class Base{
public int test(){
return 1;
}
}
子类:
public class Sub extends Base{
public String test(){
return "test";
}
}
测试:
public class Test{
public static void main(String[] args){
Base b = new Sub();
int i = b.test();
}
}
分析:
假设可以这样写,从语法和语义角度看没有问题。运行时,b虽然声明为Base类型,但它的真正实例为Sub类型。这样根据多态,调用
b.test()应该使用子类的test方法,这样就返回一个String,这样程序便会出现转换异常,所以这样写会导致程序的不安全性,所以假设不成
立,问题得证。
进一步的补充:
父类:
public class Base {
public Object test(){
return "base";
}
}
子类:
public class Sub extends Base{
public String test(){
return "sub";
}
}
测试:
Base o = new Sub();
System.out.println(o.test());
打印输出:
sub
分析:子类覆盖的方法的返回值是父类该方法的extension,这样在多态情况下没有问题。也能实现覆盖了。所以上面的方法返回值的约束可以做点修正哈。
分享到:
相关推荐
Java中的继承和多态.pdf 学习资料 复习资料 教学资源
基础篇主要介绍基本程序设计、语法结构、面向对象程序设计、继承和多态、异常处理和文本I/O、抽象类和接口等内容。 本书可作为高等院校相关专业程序设计课程的基础教材,也可作为Java语言及编程爱好者的参考资料
基础篇主要介绍基本程序设计、语法结构、面向对象程序设计、继承和多态、异常处理和文本I/O、抽象类和接口等内容。 本书可作为高等院校相关专业程序设计课程的基础教材,也可作为Java语言及编程爱好者的参考资料
【Java工程师面试复习指南】本仓库架构大部分Java工程师所需要掌握的核心知识,整合了互联网上的很多优质Java技术文章,力求打造为最完整最实用的Java开发者学习指南,如果对你有帮助,给个star告诉我吧,谢谢!...
Java面向对象的核心逻辑:OOP(面向对象编程)、封装、继承、多态、接口。。。。。。 JavaSE高级应用程序:异常、集合、线程、IO、反射、网络 二、常识与概述 计算机能直接识别的是机器指令,机器指令的封装是汇编语言...
基础篇主要介绍基本程序设计、语法结构、面向对象程序设计、继承和多态、异常处理和文本I/O、抽象类和接口等内容。 本书可作为高等院校相关专业程序设计课程的基础教材,也可作为Java语言及编程爱好者的参考资料
面向对象编程:类和对象、继承、封装、多态 异常处理机制 集合框架:List、Set、Map等 输入输出(I/O):文件操作 多线程和并发编程基础 Java基础类库:实用工具类和日期时间API JDBC数据库操作 适用人群 计算机专业...
针对大学生或java免试群体的java复习资料和提纲
关于java对面对象的自己总复习 关于1继承。封装 多态、异常、接口 JDBC有关总结
基础篇主要介绍基本程序设计、语法结构、面向对象程序设计、继承和多态、异常处理和文本I/O、抽象类和接口等内容。 本书可作为高等院校相关专业程序设计课程的基础教材,也可作为Java语言及编程爱好者的参考资料
基础篇主要介绍基本程序设计、语法结构、面向对象程序设计、继承和多态、异常处理和文本I/O、抽象类和接口等内容。 本书可作为高等院校相关专业程序设计课程的基础教材,也可作为Java语言及编程爱好者的参考资料
基础篇主要介绍基本程序设计、语法结构、面向对象程序设计、继承和多态、异常处理和文本I/O、抽象类和接口等内容。 本书可作为高等院校相关专业程序设计课程的基础教材,也可作为Java语言及编程爱好者的参考资料
封装、继承、多态 8.Java实现多态性的机制是什么? 有继承 有方法重写 父类引用指向子类对象 9.什么是方法重载?什么是方法重写?方法重载与方法重写的区别? 方法重载(Overload):是指方法名字相同,参数的个数、...
基础篇主要介绍基本程序设计、语法结构、面向对象程序设计、继承和多态、异常处理和文本I/O、抽象类和接口等内容。 本书可作为高等院校相关专业程序设计课程的基础教材,也可作为Java语言及编程爱好者的参考资料
面向对象编程(OOP)基础(类,对象,继承,封装,多态) 异常处理 泛型 基本的输入输出(I/O) 线程和并发 Java集合框架(List, Set, Map等) 适用人群 初学者:对编程感兴趣,希望从基础学起的新手。 在校学生:...
第3版 机械工业出版社 教学内容和要求 知识点 重要程度 使用频度 难度 Java 入门 高 中 易 变量和运算符 高 高 中 控制结构 高 高 易 数组 高 高 中 方法 很高 高 中 封装 很高 很高 难...
本书是Java语言的经典教材,中文版分为基础篇和进阶篇,主要介绍程序设计基础、面向对象程序设计、...基础篇主要介绍基本程序设计、语法结构、面向对象程序设计、继承和多态、异常处理和文本I/O、抽象类和接口等内容。
附录(面试前复习一下!!) 111 冒泡排序 111 二分法查找 112 命令行参数的问题 113 增强for循环 114 思考作业 114 上机作业 115 第六章 常用类的使用 117 基本数据类型的包装类 117 包装类基本知识 117 包装类的用途...
导图中包含了类、对象、继承、多态、封装等基本概念,同时也包括了接口、抽象类、异常处理、泛型等高级特性。这个导图可以帮助学习者系统地理解和掌握Java面向对象编程的核心概念,以及各种相关的语法和用法。 适用...
多态与接口 4.内部类 课程亮点: 笔记加案例详细讲解Java入门知识!!!提供详细的笔记作为辅助工具,2000多条笔记帮助学员快速掌握Java150多个知识点 课程特色: 笔记JAVA:用200条笔记串连所有知识点,让学员从...