1、继承
1.1、概念
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
1.2、写法
class Animal{
public String name;
void speak(){
name = "啦啦啦啦啦";
System.out.println(name);
}
}
class Cat extends Animal{
void printR(){
name = "100"; // 重新赋值
System.out.println(name);
}
}
1.3、重写父类方法
在继承关系中,子类会自动继承父类中定义的方法,但有时在子类中需要对继承的方法进行一些修改,即对父类的方法进行重写。重写的方法需要和父类被重写的方法具有相同的方法名、参数列表以及返回值类型。
class Person {
String str = "200,****这是成员变量";
}
class Car extends Person{
public void a(){
str = "hahahhahha"; // 重写字符串
System.out.println(str); // hahahhahha
}
}
1.4、super关键字
super关键字用于访问父类的成员。例如访问父类的成员变量、成员方法和构造方法。
1. 使用super关键字调用父类的成员
super.成员变量
super.成员方法([arg1,arg2,...])
2. 使用super关键字调用父类的构造方法
super([arg1,arg2,...])
例子:
class Apple{
int cc = 102;
String name="啦啦啦啦";
void a(String age){
System.out.println("我是a函数" + age);
}
}
class Car extends Apple{
Car(){
System.out.println(super.cc);
super.a("出啊城南1");
}
}
2、final关键字
final关键字特性final关键字可用于修饰类、变量和方法,它有“这是无法改变的”或者“终究”的含义,因此,被final修饰的类、变量和方法具有下列特征:
- final修饰的类不能被继承
- final修饰的方法不能被子类重写
- final修饰的变量(成员变量和局部变量)是常量
- 当一个类的方法被final关键字修饰后,这个类的子类将不能重写该方法
3、抽象类
-
如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类
-
抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样
-
由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用
3.1、定义抽象类
Java允许在定义方法时不写方法体,不包含方法体的方法称为抽象方法,抽象方法必须使用abstract关键字来修饰,但是在继承的时候需要重写改方法,否则报错:
abstract void fn1();
3.2、注意方法
在定义抽象类时需要注意:
-
抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
-
抽象类是不可以被实例化的,因为抽象类中有可能包含抽象方法,抽象方法是没有方法体的,不可以被调用。
-
如果想调用抽象类中定义的方法,则需要创建一个子类,在子类中将抽象类中的抽象方法进行实现。
-
抽象类中的抽象方法只是声明,不包含方法体
-
构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法
-
抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类
// 定义一个抽象类
abstract class xigua{
private String name = "啦啦";
// 抽象类可以包含普通方法
void fn(){
System.out.println(name);
}
// 定义抽象方法
abstract void fn1();
}
class Apple extends xigua{
// 抽象类的子类必须给出抽象类中的抽象方法的具体实现
// 必须重写 否则报错
void fn1(){
System.out.println("我是fn1函数");
}
}
// 抽象类
public class abstDdemo{
public static void main(String[] args) {
new Apple().fn1();
}
}