抽象类

抽象类

1.概念

抽象类必须使用abstract class声明。一个抽象类中可以没有抽象方法。抽象方法必须写在抽象类或者接口中。

格式:

abstract class 类名{ // 抽象类
    // 抽象方法 只声明未实现
    public abstract void 方法名();
}

抽象类不能被实例化,即不能用new完成,一个抽象类必须被子类继承,子类必须重写抽象类的全部抽象方法。

public class Student extends Person{

	/**
	 * 重写抽象方法
	 */
	@Override
	public void say() {
		// TODO 学生
		System.out.println("我是学生.");
	}

}

package com.kaikeba.test.pojo;

/**
 * 抽象类
 * @author 孟祥宽
 *
 */
public abstract class Person {
	public abstract void say();
}

2.※常见问题

  1. 抽象类不能使用final声明。原因:final修饰的类不能继承。而抽象类得有子类才有意义。
  2. 抽象类能有构造方法。而且子类实例化的时候的流程与普通类的继承是一样的,都是要先调用父类中的构造方法(默认是无参的),之后在调用子类自己的构造方法。
/**
 * 抽象类
 * @author 孟祥宽
 *
 */
public abstract class Person {
	// 构造方法
	public Person() {
		System.out.println("抽象类的构造方法");
	}
	public abstract void say();
}
/**
 * 子类
 */
public class Student extends Person{

	
	public Student() {
		super();
		// TODO Auto-generated constructor stub
	}

	/**
	 * 重写抽象方法
	 */
	@Override
	public void say() {
		// TODO 学生
		System.out.println("我是学生.");
	}

}

/**
 * 测试类
 * @author 孟祥宽
 *
 */
public class Test {
	public static void main(String[] args) {
		Student student = new Student();
		student.say();
	}
}

运行结果:image-20211118173130595

3.抽象类和普通类的区别

  1. 抽象类必须用public或者protected修饰,因为private无法被继承。
  2. 抽象类不可以使用new关键字创建对象,但是在子类创建对象时,抽象父类也会被jvm实例化。
  3. 如果一个子类继承抽象类,那么必须实现所有的抽象方法。 如果有未实现的抽象方法,那么子类也必须定义成抽象类。
/**
 * 抽象类
 * @author 孟祥宽
 *
 */
public abstract class Person {
	// 构造方法
	public Person() {
		System.out.println("抽象类的构造方法");
	}
	public abstract void say();
	abstract void show();// default 
}
/**
 * 子类
 * @author 孟祥宽
 *
 */
public class Student extends Person{

	// 构造函数
	public Student() {
		super();
		// TODO Auto-generated constructor stub
	}

	/**
	 * 重写抽象方法
	 */
	@Override
	public void say() {
		// TODO 学生
		System.out.println("我是学生.");
	}

	@Override
	void show() {
		// TODO Auto-generated method stub
		
	}
}
posted @ 2021-11-18 17:41  雨溟  阅读(140)  评论(0)    收藏  举报