抽象类
抽象类
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.※常见问题:
- 抽象类不能使用final声明。原因:final修饰的类不能继承。而抽象类得有子类才有意义。
- 抽象类能有构造方法。而且子类实例化的时候的流程与普通类的继承是一样的,都是要先调用父类中的构造方法(默认是无参的),之后在调用子类自己的构造方法。
/**
* 抽象类
* @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();
}
}
运行结果:
3.抽象类和普通类的区别
- 抽象类必须用public或者protected修饰,因为private无法被继承。
- 抽象类不可以使用new关键字创建对象,但是在子类创建对象时,抽象父类也会被jvm实例化。
- 如果一个子类继承抽象类,那么必须实现所有的抽象方法。 如果有未实现的抽象方法,那么子类也必须定义成抽象类。
/**
* 抽象类
* @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
}
}

浙公网安备 33010602011771号