009Java知识点小结--继承和多态
1.继承比较好理解,多各类有相同的属性和行为的时候,将这些内容抽取到一个单独的类中就可以简化成继承关系了
1)表达式:class 子类名 extends 父类名 {}
2)好处:a.提高了代码的复用性,b.提高了代码的维护性,c.让类与类产生关系,是多态的前提。
3)Java只支持单继承,不支持多继承,但可以多层继承。
4)子类只能继承所有父类的非私有成员,不能继承父类的构造方法,但是可以通过super关键字去访问父类的构造方法。
5)继承中成员变量的关系:
当子类中的成员变量和父类中的成员变量名称一样时,在子类方法中访问一个变量的查找顺序:
a:在子类方法的局部范围找,有就使用
b:在子类的成员范围找,有就使用
c:在父类的成员范围找,有就使用(肯定不能访问到父类局部范围)
d:如果还找不到,就报错。
2.this和super的区别?
this代表本类对应的引用。
super代表父类存储空间的标识(可以理解为父类引用,可以操作父类的成员)
用法上
1)调用成员变量
this.成员变量 调用本类的成员变量super.成员变量 调用父类的成员变量
2)调用构造方法
this(...) 调用本类的构造方法super(...) 调用父类的构造方法
3)调用成员方法
this.成员方法 调用本类的成员方法super.成员方法 调用父类的成员方法
注意:super(…)或者this(….)必须出现在第一条语句上,否则,就会有父类数据的多次初始化
3.继承中构造方法的关系
子类中所有的构造方法默认都会访问父类中空参数的构造方法
因为子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,一定要先完成父类数据的初始化。注意:子类每一个构造方法的第一条语句默认都是:super();
4.执行流程,判断结果
class Fu {static {System.out.println("静态代码块Fu");}{System.out.println("构造代码块Fu");}public Fu() {System.out.println("构造方法Fu");}
}class Zi extends Fu {static {System.out.println("静态代码块Zi");}{System.out.println("构造代码块Zi");}public Zi() {System.out.println("构造方法Zi");}
}class ExtendsTest2 {public static void main(String[] args) {Zi z = new Zi();}
}
执行结果是:
静态代码块Fu 静态代码块Zi构造代码块Fu构造方法Fu构造代码块Zi构造方法Zi
1)一个类的静态代码块,构造代码块,构造方法的执行流程
静态代码块 > 构造代码块 > 构造方法
2)静态的内容是随着类的加载而加载
静态代码块的内容会优先执行
3)子类初始化之前先会进行父类的初始化
5.方法重写
子类中出现了和父类中一模一样的方法声明,也被称为方法覆盖,方法复写。
6.方法重写的注意事项
1)父类中私有方法不能被重写
2)子类重写父类方法时,访问权限不能更低
3)父类静态方法,子类也必须通过静态方法进行重写。(其实这个算不上方法重写,但是现象确实如此,至于为什么算不上方法重写,多态中我会讲解)
7.方法重载能改变返回值类型吗?
方法重载能改变返回值类型,因为它和返回值类型无关。
Override:方法重写
Overload:方法重载
8.final关键字是最终的意思,可以修饰类,成员变量,成员方法。
特点:
1)final可以修饰类,该类不能被继承。
2)final可以修饰方法,该方法不能被重写。(覆盖,复写)
3)final可以修饰变量,该变量不能被重新赋值。因为这个变量其实常量。
自定义常量 final int x = 10;
9.final修饰局部变量
1) 在方法内部,该变量不可以被改变
2) 在方法声明上:
基本类型,是值不能被改变
引用类型,是地址值不能被改变
10.多态
某一个事物,在不同时刻表现出来的不同状态。
多态前提和体现
1)有继承关系
2) 有方法重写
3) 有父类引用指向子类对象
11.多态中的成员访问特点:
1)成员变量
编译看左边,运行看左边。
2)构造方法
创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化。
3)成员方法
编译看左边,运行看右边。
由于成员方法存在方法重写,所以它运行看右边。
4)静态方法
编译看左边,运行看左边。
(静态和类相关,算不上重写,所以,访问还是左边的)
12.多态的好处
1)提高了程序的维护性(由继承保证)
2)提高了程序的扩展性(由多态保证)
13.多态的弊端: 不能使用子类的特有功能。
所以为了引用子类的特有功能,把父类的引用强制转换为子类的引用
对象间的转型问题:
向上转型:
Fu f = new Zi();
向下转型:
Zi z = (Zi)f; //要求该f必须是能够转换为Zi的。
14.自己在默写代码时出现的错误
/*多态练习:猫狗案例
*/
class Animal
{public void eat(){System.out.println("进食");}
}
class Cat extends Animal
{public void eat(){System.out.println("吃鱼<?)))><<");}public void playGame(){System.out.println("玩毛线,抓蝴蝶");}
}class Dog extends Animal
{public void eat(){System.out.println("吃骨头@==@");}public void lookDoor(){System.out.println("有人来了,汪汪~~");}
}class PolymorphismTest // polymorphism:多态性
{public static void main(String[] args){ /*第一次编译又忘了打这一句,看来以后防止自己再忘,写代码是首先写主方法*/Animal a = new Cat();a.eat();Cat b = (Cat)a;b.eat();b.playGame(); /*a.playGame();// 错误:变量a的类型为Animal*/System.out.println("---------------");a = new Dog();a.eat();Dog c = (Dog)a;c.eat();c.lookDoor();}
}
009Java知识点小结--继承和多态相关推荐
- Java常见面试知识点:继承、接口、多态、代码块
问题:Java常见面试知识点:继承.接口.多态.代码块 答案: 1.继承 继承中构造方法的访问特点 子类中所有的构造方法默认都会访问父类中无参的构造方法 为什么? • 子类在初始化的时候,有可能会使用 ...
- BookCollectionSoftware - 图书管理(知识点糅合::类,对象,抽象类,接口,封装,继承,多态,顺序表)- java - 细节狂魔
文章目录 前言 图书管理应实现的功能 准备工作 开始操作 先在book包,创建一个Book类,用来存储一本书的信息 小技巧: 根据小技巧来创造我们的 构造方法,公开的输入输出的接口,,还要重写的toS ...
- 面向对象、继承、多态、封装、匿名内部类的基本知识点复习总结
1.面向对象 概述:一种编程思想,强调的谁来做事情,强调的是结果 面向对象的好处:1.更符合人类的思想习惯:做事情的时候先去get工具,get对象2.复杂的问题简单化3.执行者变成了指挥者 面向过程是 ...
- 【c#】继承和多态的一点知识点
目录 简要说明继承和多态: 继承: 继承的特点: [访问基类base的用法]: 使用new关键字隐藏(重写)基类成员 密封类与抽象类与[虚方法] 重写和重载的区别 多态: 静态多态性: 动态多态性: ...
- C++基础知识点小结
C++基础知识点小结 第一章 绪论 (1)cout 输出流的对象 (2)cin输入对象 (3)endl 输出控制符/操控符 (4)标识符 (5)命名空间(namespace) (6)左值: (7)右值 ...
- 2020年Android面试高频知识点小结+9家公司面试真题
作者:小羊子说 前言 正直2020金九银十,第一次换工作或是面试候选人,我们都会对面试知识做一次总结梳理,毕竟开发技术无边界,不同人对技术的解读不同.文章总结了最近大半年中的面试考查点V1.0,希望对 ...
- 面向对象的三大特性(封装、继承、多态)
继承 什么是继承 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类 python中类的继承分为:单继承和多继承 class ...
- python有什么用处案例_用实例解释Python中的继承和多态的概念
在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Base class.Supe ...
- python 继承和多态
python 继承和多态 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Ba ...
- Python面对对象编程——结合面试谈谈封装、继承、多态,相关习题详解
1.面向对象的三大特征 封装:属性和方法放到类内部,通过对象访问属性或者方法,隐藏功能的实现细节.当然还可以设置访问权限; 继承:子类需要复用父类里面的属性或者方法,当然子类还可以提供自己的属性和方法 ...
最新文章
- usaco前两章小结
- fflush函数的深入理解
- 推理成本降低48倍!1张GPU就能让静态图像动起来 | 格拉兹科技大学Facebook
- html文章整体居中,div居中与div内容居中
- Mysql 优化器内部JOIN算法hash join On-Disk Hash Join Grace Hash Join Hybrid hash join过程详解
- python基础学习——函数和方法的区别与联系
- 廖雪峰 练习 把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字...
- 15分钟从零开始搭建支持10w+用户的生产环境(三)
- 嵌入式linux clion,跨平台IDE集成开发环境Clion教程:嵌入式开发
- 人工智能数学基础之高等数学
- 7-7 旅游规划 (25 分)
- tomcat服务器配置优化
- [Android] 环境配置之正式版Android Studio 1.0
- 2021谷歌年度AI技术总结 | Jeff Dean执笔万字展望人工智能的5大未来趋势!
- 德马克机械波中shift over to right的意思
- python使用numpy的np.mod函数计算numpy数组除以某一特定数值剩余的余数(remainder)、np.mod函数和np.fmod函数对负值的处理方式有差异
- Java知识点(三)
- WebMagic爬取码市、猪八戒、一品威客外包数据
- 苏嵌//张福辉//2018.7.11
- uni-app 上下滑动左右滑动