一、什么是抽象类?
Java中的抽象类是一种特殊的类,它不能被实例化,只能被继承。它的存在主要是为了给其他类提供一个通用的模板或接口,让这些子类实现父类中定义的抽象方法。
抽象类可以包含抽象方法、非抽象方法、静态方法和成员变量。其中抽象方法只有声明,没有方法体,必须在子类中实现。
public abstract class Animal {
// 非抽象方法
public void eat(String food) {
System.out.println("Animal is eating " + food);
}
// 抽象方法,没有方法体
public abstract void makeSound();
}
二、抽象类的作用
使用抽象类可以达到以下的效果:
1. 抽象类能够约束子类的行为
由于抽象类不能被实例化,因此它主要是作为父类来被继承和实现。通过定义抽象方法和非抽象方法,可以对子类的行为进行约束,让子类必须实现某些方法,从而保证了程序的正确性。
public class Dog extends Animal {
// 重写抽象方法
@Override
public void makeSound() {
System.out.println("Dog is barking");
}
}
public class Cat extends Animal {
// 重写抽象方法
@Override
public void makeSound() {
System.out.println("Cat is meowing");
}
}
public class Test {
public static void main(String[] args) {
Animal dog = new Dog();
Animal cat = new Cat();
dog.makeSound(); // Dog is barking
cat.makeSound(); // Cat is meowing
}
}
2. 抽象类可以提高代码的复用性
通过抽象类,可以将子类中公共的属性和方法放在抽象父类中,从而避免了重复编写代码。这样,可以提高代码的复用性,减少代码的量。
public abstract class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public abstract void doSomething();
}
public class Student extends Person {
public Student(String name, int age) {
super(name, age);
}
@Override
public void doSomething() {
System.out.println("I am a student.");
}
}
public class Teacher extends Person {
public Teacher(String name, int age) {
super(name, age);
}
@Override
public void doSomething() {
System.out.println("I am a teacher.");
}
}
public class Test {
public static void main(String[] args) {
Person s = new Student("Tom", 18);
Person t = new Teacher("Jerry", 30);
System.out.println(s.getName() + " is " + s.getAge() + " years old and ");
s.doSomething(); // I am a student.
System.out.println(t.getName() + " is " + t.getAge() + " years old and ");
t.doSomething(); // I am a teacher.
}
}
三、抽象类为什么不能被实例化?
抽象类不能被实例化是Java语言设计的一个重要特点。这是由于抽象类本身存在着不完整的方法,即抽象方法,这些方法需要延迟到其子类去实现。如果允许抽象类被实例化,那么就会存在没有实现抽象方法的实例对象,这是不合法的,也是不安全的。
另外,抽象类也存在一定的抽象性和不确定性,这使得其本质上无法具体化为一个实例对象。抽象类作为一个概念,其主要存在的目的是作为其他类的父类,而不是作为单独的实体。因此,抽象类的实例化是无意义的。
四、抽象类的子类能否实例化?
抽象类不能被实例化,但是抽象类的子类可以被实例化。由于子类继承了抽象类中的方法和属性,因此子类是可以作为具体的实体存在的。
public abstract class Animal {
public abstract void makeSound();
}
public class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Dog is barking");
}
}
public class Test {
public static void main(String[] args) {
Animal animal = new Dog();
animal.makeSound(); // Dog is barking
}
}
五、小结
抽象类是Java中的一个重要特性,它主要用于约束子类的行为和提高代码的复用性。抽象类不能被实例化,但是抽象类的子类可以被实例化。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/253872.html
微信扫一扫
支付宝扫一扫