什么是抽象的?

顾名思义:很不具体,没有具体的执行,只是个概念

abstarct它可以修饰什么?

  1. 修饰类:用abstract修饰符修饰的类 叫做抽象类
  2. 修饰方法:用abstract修饰符修饰的方法 ,只有方法的结构(以;结尾),没有方法执行体叫做抽象方法
    注意native修饰的方法虽然也没有方法体,但是不是抽象方法,只是执行的过程是其他语言写的(调用本地C/C++语言)

abstarct修饰的特点?

  1. 抽象类中不是必须含有抽象方法,可以全部为具体
  2. 如果方法用abstract修饰,则该类必须为abstract修饰的类(当我也可是接口implements),普通的类是不允许含有抽象的方法.
  3. 抽象类可以直接单继承抽象类
  4. 抽象类可以直接单继承具体类(但是一般不会这样写)
  5. 具体类不可以直接单继承抽象类,需要将父类中的有抽象的方法具体化(或者子类也变成抽象类,等下一个具体类去具体化)

抽象类与普通类区别?

  1. 抽象类中除了允许抽象方法外,其余的和普通类基本相同
  2. 抽象类含有构造方法,但是不能直接通过调用构造方法创建对象,它只能通过子类(普通类)继承来做事,通过调用子类构造方法默认调用super();(即默调用父类构造方法)创建父类抽象类对象来进行做事情
  3. 也可以通过匿名内部类来创建抽象类对象,前提是抽象类中有抽象方法,通过匿名类来对抽象类中的抽象方法具体化。

测试示例:
Animal抽象类

public abstract class Animal {

    public Animal(){}


    public abstract void eat();


    public void sleep(){
        System.out.println("sleep方法。。。");
    }
}

子类Person继承Animal抽象类

public class Person extends Animal{

    @Override
    public void eat() {
        System.out.println("eat方法。。。。");
    }
}

测试类:

public class TestMain {
    public static void main(String[] args) {
        //通过匿名内部类创建抽象类对象
        Animal animal = new Animal() {
            @Override
            public void eat() {
                System.out.println("匿名方法。。。");
            }
        };
        //执行是匿名类重写父类中的抽象的方法
        animal.eat();
        //Animal中普通的方法
        animal.sleep();

        //创建子类的对象
        Person person = new Person();
        //可以使用父类独有的方法
        person.sleep();
        //执行的是子类中重写父类中抽象的方法
        person.eat();


    }
}

测试结果:

Java abstract类作用 java的abstract有什么用_抽象类