很多具有相同特征和行为的对象可以抽象为一个类;
很多具有相同特征和行为的类可以抽象为一个抽象类;
抽象类用关键字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.抽象类可以有构造方法
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)