3.8、抽象类(重点)
抽象类:包含一个抽象方法的类称为抽象类,抽象方法是只声明而未实现的方法,所有的抽象方法必须使用abstract关键字声明,所有的抽象类也需要使用abstract关键字声明。
abstract class A{
public abstract void fun();
}
public class Demo{
public static void main(String args[]){
A a =null; //声明对象
a = new A(); //出错了
}
}
对于抽象类而言,不能直接进行实例化的操作,但是可以声明,如果想要使用抽象类,则必须依靠子类,抽象类是必须被子类继承的,而且被继承的子类需要实现抽象类中的全部抽象方法。
abstract class A{
public abstract void fun();
}
class B extends A{
public void fun(){ //覆写方法时需要注意访问控制权限
System.out.println("hello world!!!");
}
}
public class Demo{
public static void main(String args[]){
B b = new B();
}
}
思考:
- 抽象类是否能使用final声明呢?
- 抽象类必须被子类继承
- 被final声明的类不能有子类
- 抽象类中能不能存在构造方法?
abstract class A{
public A(){ //构造方法
System.out.println("**********************");
}
public abstract void fun();
}
class B extends A{
public B(){
super();
System.out.println("=======================");
}
public void fun(){ //覆写方法时需要注意访问控制权限
System.out.println("hello world!!!");
}
}
public class Demo{
public static void main(String args[]){
B b = new B();
}
}
抽象类中允许有构造方法,但是此构造方法是不能直接调用的,是交给子类去调用的,子类对象的实例化过程中,永远是先调用父类中的构造方法。
实际上来讲,抽象类就是比普通类多了一个抽象方法而已。
abstract class A{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public A(String name){ //构造方法
this.name = name;
}
public abstract void fun();
}
class B extends A{ //继承抽象类
public B(String name){
super(name);
}
public void fun(){ //覆写方法时需要注意访问控制权限
System.out.println(super.getName());
}
}
public class Demo02 {
public static void main(String args[]) {
B b = new B("张三");
b.fun();
}
}
抽象类中的属性如果想要初始化,则肯定还是依赖于构造方法。
转载请注明来源