继承
【共同属性】
当有很多个类中存在相同的属性与行为,只需将这些内容抽放在一个类中,需要时只需继承那个类(父类,也称,基类)即可
所以,继承:就是子类继承父类的属性和行为,使得子类对象具有与父类相同的属性、相同的行为。子类可以直接访问父类中的非私有的属性和行为。
格式:
class父类{
...
}
class 子类 extends父类{
...
}
继承后的特点
成员变量重名:
直接方法:直接通过子类访问成员变量
等号左边是谁,就优先用谁,没有则向上找,即用的是谁的对象就访问谁的成员变量
间接方法:通过成员方法访问成员变量
是谁的方法优先用谁,没有则向上找
三种变量重名
局部变量: 直接写成成员变量
本类的成员变量:this.成员变量名
父类的成员变量:super.成员变量名
成员方法重名:
创建的对象是谁,就优先用谁,若无,则向上找
另:无论是成员方法还是成员变量,都是向上找即向父类找
重写
概念:在继承关系中,方法名称一样,参数列表也一样
重写(Override):方法名称一样,参数列表【也一样】(覆写,覆盖)
重载(Overload):方法名称一样,参数列表【不一样】
方法覆盖重写的特点:创建的是子类对象,则优先使用子类的方法
抽象类
定义:
抽象方法:没有方法体的方法。
抽象类:包含抽象方法的类。
格式:
修饰符 abstract 返回值类型 方法名(参数列表);
另;
- 抽象类不能创建对象
- 抽象类中不一定含抽象方法,但有抽象方法的类必须是抽象类
- 抽象类的子类,必须重写抽象父类中所有的抽象方法,否则,编译无法通过而报错。除非该子类也是抽象类
接口
概述:java语言中的一种引用类型,是方法的集合,其封装了方法,包括抽象方法,默认方法静态方法,私有方法
定义:与定义类方式相似,但是使用interface关键字。它也会被编译成.class文件,但一定要明确它并不是类,而是另外一种引用数据类型。
实现
类与接口的关系为实现关系,即类实现接口
格式:
class 类名 implements 接口名{
//重写接口中抽象方法【必须】
//重写接口中默认方法【可选】
}
多态性
定义:是指同一行为,具有多个不同表现形式。
多态体现格式:
父类类型变量名=new子类对象;
变量名.方法名();
其好处:使程序编写的更简单,并有良好的扩展。
final关键字
final:不可改变。可以用于修饰类、方法和变量。
类:被修饰的类,不能被继承。
方法:被修饰的方法,不能被重写。
变量:被修饰的变量,不能被重新赋值
使用方式
修饰类
格式如下:
final class类名{
....
}
修饰方法
格式如下:
修饰符 final 返回值类型 方法名(参数列表) {
//方法体
}
重写被final修饰的方法,编译时就会报错。
权限修饰符
在Java中提供了四种访问权限,使用不同的访问权限修饰符修饰时,被修饰的内容会有不同的访问权限,
public:公共的
protected:受保护的
default:默认的
private:私有的
内部类
将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类
成员内部类
成员内部类:定义在类中方法外的类。
定义格式:
class 外部类{
class内部类{
}
}
访问特点
内部类可以直接访问外部类的成员,包括私有成员。
外部类要访问内部类的成员,必须要建立内部类的对象。
创建内部类对象格式:外部类名.内部类名对象名=new外部类型().new内部类型();
匿名内部类
匿名内部类:是内部类的简化写法。它的本质是一个带具体实现的父类或者父接口的匿名的子类对象。
开发中,最常用到的内部类就是匿名内部类了。以接口举例,当使用一个接口时,做如下几步操作,
1.定义子类
2.重写接口中的方法
3.创建子类对象
4.调用重写后的方法
前提:匿名内部类必须继承一个父类或者实现一个父接口。
格式:
new 父类名或者接口名(){
//方法重写@Override
public void method(){
//执行语句
}
};