Java继承多态API

1:如何制作帮助文档
(1)写一个类 (公共类)
(2)加入文档注释
(3)通过javadoc工具生成即可
javadoc -d 目录 -version -author -encoding gbk MyMath.java

2:通过JDK提供的API学习了Math类
(1) 产生随机数
public static double random();
(2) 如何产生一个1-100之间的随机数
(int) (Math.random() * 100) + 1
(3) 猜数字小游戏
1. 如何循环录入数据
2. 二分查找

3:代码块
(1)用{}括起来的代码。
(2)分类:
A: 局部代码块
局部位置, 限定变量的生命周期,提高内存的利用率;
B: 构造代码块
成员位置,把构造方法里面相同代码提取出来,放在{}就是构造代码块,它先于构造方法执行。
每创建一个对象就执行一次
C: 静态代码块
成员位置 static{}, 对类进行初始化,随着类的加载而执行,并且只执行一次
D: 同步代码块(后面讲)
(3)静态代码块,构造代码块,构造方法的顺序问题?
静态代码块 > 构造代码块 > 构造方法
4:继承
(1)把多个类中相同的成员给提取出来定义到一个独立的类中。然后让这多个类和该单独的类产生一个关系,使多个类中具备这个单独的类中定义的成员。
这个关系叫继承。
(2)Java中如何表示继承呢?格式是什么呢?
A:用关键字extends表示
B:格式:class 子类名 extends 父类名 {}
(3)继承的好处:
A:提高了代码的复用性
B:提高了代码的维护性
C:让类与类产生了一个关系,是多态的前提
(4)继承的弊端:
A:让类的耦合性增强。这样某个类的改变,就会影响其他和该类相关的类。
设计原则:低耦合,高内聚。
耦合:类与类的关系
内聚:自己完成某件事情的能力(责任)
B:打破了封装性

(5)Java中继承的特点
	A:Java只支持单继承,不支持多继承
	B:  Java支持多层
(6)继承的注意事项:
	A:子类不能继承父类的私有成员(私有成员是被子类隐式继承的,其实私有成员被继承了,但是在子类中不能访问。反射)
	B:子类不能继承父类的构造方法,但是可以通过super去访问
	C:不要为了部分功能而去继承	
(7)什么时候使用继承呢?
	继承的原则:
		A类和B类如果是: is a
		is a的关系:
		Person:
			Student
			Teacher
(8)Java继承中的成员关系
	A:成员变量
		a:子类的成员变量名称和父类中的成员变量名称不一样。
		b:子类的成员变量名称和父类中的成员变量名称一样,这个怎么访问呢?
			子类的方法访问变量的查找顺序:
			首先找子类的局部变量
			再找子类的成员变量
			再找父类的成员变量
	B:构造方法
		a:子类的构造方法默认会去访问父类的无参构造方法
			目的:将在父类中定义的成员变量初始化。
		b:父类中如果没有无参构造方法,怎么办?
			子类通过super去明确调用带参构造
			子类通过this调用本身的其他构造,但是一定会有一个去访问了父类的构造
			让父类提供无参构造
			this(...), super(...)只能在构造方法的第一条语句。

	C:成员方法
		a:子类的成员方法和父类中的成员方法名称不一样。
		b:子类的成员方法和父类中的成员方法名称一样,这个怎么访问呢?
			通过子类对象访问一个方法的查找顺序:
			查找子类的成员方法
			再查找父类的成员方法
				
(9)两个面试题:
	A:Override和Overload的区别? Overload是否可以改变返回值类型?
		override: 子类重写父类的同名方法。要求返回值类型一样,方法名一样,参数列表一样。子类的访问权限不能比父类的小。
		overload:在同一个类中,方法名一样,但是参数列表不一样。与返回值类型无关
			如果在子类中定义了一个和父类同名的方法,但是参数列表不一样就会构成重载。
			如果在子类中定义了一个和父类同名的方法,但是参数列表一样,但是返回值类型不一样,会报错。
	B:this和super的区别和各自的作用?
		this.成员变量	super.成员变量 
		this(...)		super(...)
		this.成员方法()	super.成员方法()
(10)数据初始化的面试题(了解)
	A:一个对象的初始化过程
		自行补充
	B:子父类的构造执行过程
		加载父类
		加载子类
		对父类进行初始化
		对子类进行初始化
	C:分层初始化

5:final关键字
(1)是最终的意思,可以修饰类,方法,变量。
(2)特点:
A:修饰类,表示这个类不能被继承
B:修饰变量,表示该变量是常量,它的值不能被修改
基本数据类型:里面的值不能被修改
引用数据类型:它的地址值不能被修改,指向同一个对象,但是对象的内容可以修改
注意事项:
被final的变量必须进行显示赋值
只能被赋值一次
C:修饰方法,表示该方法不能被子类重写

6:多态
(1)同一个对象在不同时刻体现出来的不同状态。
(2)多态的前提:
A:有继承(实现)关系
B:子类重写父类的方法
C:父类的引用变量指向子类的对象

	多态的分类:
		a:具体类多态
			class Father{}
			class Son extends Father{}
			Father father = new Son();
(3)多态中的成员访问特点
	A:成员变量
		编译看左边,运行看左边	
	B:静态方法
		编译看左边,运行看左边	
	C:成员方法
		编译看左边,运行看右边
	D:静态方法
		编译看左边,运行看左边
(4)多态的好处:
	A:提高代码的维护性 (继承体现)
	B:提高代码的扩展性 (多态体现)
(5)多态的弊端:
	破坏了封装性(继承)
	无法访问子类特有的功能

(6)多态中的转型
	A:向上转型
		父类的引用指向子类的对象(Java默认支持)
	B:向下转型
		将父类的引用转换为子类的引用(要求父类的引用指向子类的对象,而且必须使用强制类型转换)
		ClassCastException	类型装换异常		

猜你喜欢

转载自blog.csdn.net/weixin_42443419/article/details/89033526