标签:extends pac oid 表示 extend stat 私有 eth static
当父类的方法实现没有意义时,通常用abstract
将方法修饰为抽象方法,如Animal
父类的run()
方法,把该方法体写出来是没有意义的(动物的跑的方式不能确定)。因为抽象方法的存在,也要将类用abstract
修饰,这样的类称为抽象类。
含有抽象方法的类必须被声明为抽象类
public class Test01 {
public abstract void run();
//报错:Abstract method in non-abstract class,表示抽象方法不在抽象类内
}
public abstract class Test01 {
public abstract void run(){};// 此处不能有花括号
//报错:Abstract methods cannot have a body,表示抽象方法不能有方法体
}
//----------------正确的做法在下面-----------------------------
public abstract class Test01 {
public abstract void run();
}
抽象类不能被实例化。抽象类是用来被继承的,抽象类的子类必须重写父类的抽象方法,并提供方法体。若没有重写全部的抽象方法,则要声明为抽象类。
package day01;
public abstract class Test01{
public abstract void move();
public abstract void eat();
}
class Dog extends Test01{
@Override
public void move() {
System.out.println("狗的移动方式是跑");
}
@Override
public void eat() {
System.out.println("狗的吃东西的方式是舔");
}
//如果不重写实现从父类继承来的方法会报错:
// Class ‘Dog‘ must either be declared abstract or implement abstract method ‘move()‘ in ‘Test01‘
//必须重写所有全部的抽象方法,如果不重写全部抽象方法,必须将当前类声明为抽象类,如下面的hicken类。
}
abstract class Chicken extends Test01{
@Override
public void eat() {
System.out.println("小鸡吃东西的方式是啄");
}
//可以看到抽象类可以继承抽象类,被声明为抽象类的子类不必重写全部父类抽象方法。
}
class MainClass{
public static void main(String[] args) {
Test01 a=new Test01() {
@Override
public void move() {
System.out.println("true");
}
@Override
public void eat() {
System.out.println("emmm");
}
};//如果要实例化,必须按照此方法重写所有抽象方法
a.eat();//输出emmm
}
}
不能用abstract
修饰属性、私有方法、构造器、静态方法、final
方法或final
类
package day01;
public abstract class Test01{
private int a;
public abstract int a=10;
//会报错:Modifier ‘abstract‘ not allowed here
private abstract void fun1(){
//报错:Illegal combination of modifiers: ‘abstract‘ and ‘private‘
}
public abstract Test01(){
//报错:Modifier ‘abstract‘ not allowed here
}
}
标签:extends pac oid 表示 extend stat 私有 eth static
原文地址:https://www.cnblogs.com/jimmy888/p/13580901.html