很多具有相同特征和行为的对象可以抽象为一个类;
很多具有相同特征和行为的类可以抽象为一个抽象类;
抽象类用关键字abstract来声明。
抽象方法的格式
权限修饰符 abstract 返回值类型 方法名(参数列表);
抽象方法
如果一个类中含有抽象方法,那么这个类一定是抽象类;
抽象类中的方法由其子类来实现。
//此处简单写一个抽象类
abstract class Car{
public abstract void start();
//抽象方法,只有方法的声明,没有方法的实现,具体实现由子类完成
}
抽象类的规则
1.抽象类可以没有抽象方法,有抽象方法的必定是抽象类
//显然,有抽象方法的类必定是抽象类;下面写一个没有抽象方法的抽象类
abstract class Car{
public void start(){
System.out.println("汽车启动了");
}
}
2.非抽象类继承抽象类,必须实现其所有的抽象方法
abstract class Car{
public abstract void start();
public abstract void stop();
}
class TSL extends Car{
public void start(){
System.out.println("我的特斯拉启动了");
}
public void stop(){
System.out.println("哎,怎么就熄火了")
}
}
3.抽象类可以继承抽象类,并且可以不实现父类抽象方法
abstract class Car{
public abstract void start();
public abstract void stop();
}
abstract class BWM extends Car{}
4.抽象类可以有方法的实现和属性
public class Abstract2 {
public static void main(String[] args) {
TSL t = new TSL("特斯拉");
t.start(); //输出结果:我的特斯拉启动了
t.stop(); //输出结果:哎,怎么就熄火了
t.eat(); //输出结果:汽车去加油站吃饭了
System.out.println(t.name); //输出结果:null
System.out.println(t.color); //输出结果:红色
}
}
abstract class Car{
//抽象方法中的属性
String color = "红色";
//抽象方法中实现的普通方法
public void eat(){
System.out.println("汽车去加油站吃饭了");
}
public abstract void start();
public abstract void stop();
}
class TSL extends Car{
String name;
//无参构造
public TSL(){}
//含参构造
public TSL(String name) {
this.name = name;
}
public void start(){
System.out.println("我的特斯拉启动了");
}
public void stop(){
System.out.println("哎,怎么就熄火了")
}
}
5.抽象类不可以被实例化;简而言之,就是抽象类不能创建对象
6.不能修饰抽象的修饰符:
private:被私有化后,子类无法进行重写,即在子类中无法实现父类的抽象方法,违背了抽象类存在的作用
static:静态资源优先于对象存在,存在加载顺序的问题
final:被final修饰的类不能用来被继承,从而不能去实现抽象类的抽象方法
7.抽象类可以有构造方法



