抽象类和密封类

抽象类(abstract class)

基本概念
包含抽象方法的类叫做抽象类。
抽象方法被abstract修饰,类也要由abstract修饰。
抽象类中可以有抽象方法,也可以有非抽象方法。
抽象类不能创建实例对象 不能new抽象类。
抽象类中可以没有抽象方法,但是抽象方法一定在抽象类中。因为抽象类不能被实例化,抽象方法不能被实现。

抽象类和普通类的区别:

  • 抽象类不能被实例化。可以定义抽象类型的变量,但值必须为null,或者是其派生类的非抽象类的实例的引用
  • 抽象类被abstract所修饰
  • 允许抽象类包含抽象成员

抽象方法(abstract method)

基本概念
在抽象类内部不给予实现。当有一个类继承了当前的抽象类后,需要实现。
抽象方法必须是public/protected/或者不加访问修饰限定符(默认为public),不能被private修饰

抽象类的派生类:

  1. 如果是普通类必须实现抽象类的抽象方法
  2. 如果是抽象类,可以不实现基类的派生方法
abstract class Animal {//抽象类
    //抽象方法
    public abstract void bark();
    //非抽象方法
    public void fun() {
        System.out.println("abstract Animal fun()");
    }
}
//抽象类派生的普通类
class Dog extends Animal {

    public Dog() {
        System.out.println("Dog() init");
    }

        public  void bark() {
            System.out.println("Dog:wangwang");
        }//重写抽象类的抽象方法,注释掉会出错
}
public class Test {
    public static void main(String[] args) {
        //Animal animal = new Animal(); erro,抽象类无法进行实例化
        Dog dog = new Dog();
        dog.bark();
    }
}

//输出结果
Dog() init
Dog:wangwang

密封类(final class)

当一个类被final所修饰的时候称为密封类。
作用:防止有意的派生。

注意:

  • 密封类不能用作基类,就算派生类被final所修饰也不行。
  • 密封类也不能是抽象类

密封方法(final method)

当实例方法声明包含final修饰符时,称该方法为密封方法
密封方法不能被重写。

final class Person {//密封类
    private String name;
    private int age;
    public Person() {
        System.out.println("Person init()");
    }

class Student extends Person {//编译报错,不能从final类继承
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值