类的继承:一个类(子类)通过extends继承一个已有的类(父类),子类继承父类的所有属性还有方法,同时也可以增加自己的属性和方法。
单继承:每个类只能继承一个类,一个父类可以由多个子类
好处:简化代码 易于维护
实例化过程:子类先调用父类构造器,再调用子类构造器。即先实例化父类,再实例化子类。
super():调用父类的构造器,只能在子类构造器中且必须首行。如没有,会默认加上。
this():调用本类的构造器,只能写在构造器的第一行
super()和this()不能同时出现
权限访问修饰符
- private:私有的 限制类外访问
- friendly(default):默认的 类内,同一包的类
- protected : 类内,同一包的类,不同包的子类
- public : 公有的 同一工程访问
方法的覆盖(重写):对父类中的方法进行改造,要有继承关系
规则:
1.相同的方法名
2.相同的参数
3.相同的返回值类型
4.重写的访问权限不小于父类被重写方法的访问权限
5.只修改代码块内容
引用数据类型的转换
上溯造型:向上转换,子类转换为父类,自动转换
要有继承或实现关系,失去子类自己的属性和行为,只能使用父类中的.
下溯造型:向下转型,强制转换 将父类对象显示的转换成子类类型
曾经向上转换过的对象,才能再向下转换。对象不允许不经过上溯造型而直接下溯造型
![](https://img.haomeiwen.com/i15391511/6f8e621e7c971c6a.png)
多态:类的多种实现,不同对象对同一行为做出的不同反应
条件:
- 要有继承和实现
- 方法的重写
- 有上溯造型
优点:简化代码,易于扩展,改善代码的组织性和可读性
static关键字:可以修饰属性 方法 代码块 只能修饰l类成员
静态变量:所有对象共享,类变量,类存在static变量就存在
访问方式:类名.属性 对象名.属性(需实例化)
静态方法:不需实例化,也可直接访问。类方法。
访问方式:类名.方法 对象名.方法(需实例化)
作用:简化方法的使用 便于访问静态属性
注意:
- 静态方法里只能直接访问静态成员,而不能直接访问类中的非静态成员
- 静态方法中不能使用this、super关键字
- 静态方法不能被非静态方法覆盖,静态方法不能修饰构造器
静态代码块:
- 一个类中由static关键字修饰的,不包含在任何方法体中的代码块
- 当类被载入时,静态代码块被执行,且只被执行一次
- 静态块经常用来进行类属性的初始化
final关键字
可修饰的元素:
- 类
- 变量:不能被重新赋值(在声明时赋值,或在构造器中赋值) 无默认值
- 方法:不能被重写
静态常量:被static和final修饰的成员变量,必须字母大写,单词间用下划线
抽象类:abstract关键字(有抽象方法和非抽象方法)
抽象方法:abstract关键字修饰,只有声明,没有实现。
规则:
- 不能被实例化
- 内部的抽象方法必须被重写 所以抽象方法不能为static
什么情况?类必须被声明为抽象类:
1.有抽象方法
2.继承抽象类,而没有全部重写父类的抽象方法
3.实现接口,而没有全部重写其中的抽象方法
接口(interface)
- 只包含常量和抽象方法
- 对类来说是一套规范,一套行为协议
- 不能实例化 因为没有构造器
接口的默认:常量:public static final 抽象方法: public abstract
接口与抽象类的区别
接口:
1.只能定义常量,只能有抽象方法、用interface修饰
2.一个类可以实现多个接口,接口和接口之间可以多继承
3.接口中的方法必须被重写
4.接口更灵活,松耦合
抽象类:
1.可以定义常量和全局变量,可以非抽象方法,abstract关键字修饰
2.一个类只能继承一个抽象类
内部类
• 内部类特性
内部类就是定义在另一个类内部的类。
内部类对于同一包中的其它类来说,内部类能够隐藏起来。
• 注意
内部类可以访问其外部类中所有的属性和方法
无需创建外部类的对象,即可从内部类访问外部类的变量和方法。
必须创建内部类的对象,否则无法从外部类访问内部类的变量和
方法。
如果内部类中有和外部类同名的变量或方法,则内部类的变量和
方法将获得比外部类的变量和方法更高的优先级。
不能定义static变量
一个类只会被这个类所调用,其他类不会使用他,你可以把它定义成一内部类,这样可以隐藏实现细节,避免错误的调用。
• 内部类特性
普通类的访问权限修饰符
default
public
内部类的访问权限修饰符
default
public
protected
private
![](https://img.haomeiwen.com/i15391511/9f88d780ca82abd4.png)
![](https://img.haomeiwen.com/i15391511/f7c20d25e5c6b199.png)
![](https://img.haomeiwen.com/i15391511/a8ddb2ce158e7ce9.png)
在方法定义的内部类中只能访问方法中的final类型的局部变量
网友评论