> 文章列表 > Java 抽象类

Java 抽象类

Java 抽象类

目录

1. 什么是抽象类

2.抽象类的语法

3.抽象类特性

3.1抽象类不能直接实例化对象

3.2抽象方法不能被private修饰

3.3抽象方法不能被final和static修饰

3.4抽象类必须被继承,子类需重写父类中抽象方法,否则子类也是抽象类,abstract

3.5抽象类中不一定有抽象方法,但有抽象方法的一定是抽象类

3.6抽象类中可以有构造方法,供子类创建对象的时候,初始化父类成员变量

4抽象类的作用


1. 什么是抽象类?

        在面向程序中,所有的对象都是通过类来描绘的,但并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描述一个具体的对象,那么这个类就是抽象类。

        比如:

        Animal是一个动物类,但Animal不是一个具体的动物,并不知道这个动物吃什么,所以Animal类中的eat方法无法具体实现。而Cat类,Dog类都是动物类,与Animal类是继承关系,两者都是具体动物,其内的eat方法可以实现 。因此Animal是一个抽象类。


2.抽象类的语法

        Java中,抽象类需要被abstract修饰,而类中抽象的方法也需要被抽象,抽象方法不能给出具体的实现体。

//抽象类,被abstract修饰的类
abstract class Animal{public int age;//属性public String name;abstract public void eat();//抽象方法public void a(){System.out.println("普通方法");}
//构造方法public Animal(int age, String name) {this.age = age;this.name = name;}
}
class Cat extends Animal{@Overridepublic void eat() {System.out.println(name + "吃鱼");}
}

       抽象方法中也可以有普通方法和属性,甚至构造方法。


3.抽象类特性

3.1抽象类不能直接实例化对象

        Animal animal = new Animal();//编译出错

3.2抽象方法不能被private修饰

         

    abstract private void eat();//编译错误

3.3抽象方法不能被final和static修饰

     abstract public static void eat();//编译错误abstract final void eat2();

3.4抽象类必须被继承,子类需重写父类中抽象方法,否则子类也是抽象类,abstract

//抽象类,被abstract修饰
abstract class Animal{public int age;//属性public String name;abstract public void eat();//抽象方法public void a(){System.out.println("普通方法");}public Animal(int age, String name) {this.age = age;this.name = name;}
}
class Cat extends Animal{public Cat(int age, String name) {super(age, name);}@Overridepublic void eat() {System.out.println(name + "吃鱼");}
}
abstract class Dog extends Animal{public Dog(int age, String name) {super(age, name);}
}

3.5抽象类中不一定有抽象方法,但有抽象方法的一定是抽象类

3.6抽象类中可以有构造方法,供子类创建对象的时候,初始化父类成员变量


4抽象类的作用

抽象类就是起到一个校验代码的作用。抽象类本身不能被实例化,使用的时候,必须创建抽象类的子类,然后让子类重写抽象类中的抽象方法。细一看,不就是重写就能实现的吗,为什么还要进行抽象,这不是多次一举吗?

没错,这通过重写就能实现,但是并不多此一举。

在我们实际工作中使用抽象类,父类并不会被实例化,实际工作也不能由父类完成,而当我们实例化父类的时候,编译器就会报错,这样就能让我们提前发现问题,及时改正,避免最后在大量修改。

中评网