【Java抽象类 11】

一、抽象类

1、语法,在class关键字前边添加abstract关键字

2、抽象类无法实例化,但是抽象类中仍然有构造方法

3、抽象类中不一定有抽象方法,但是抽象方法必须出现在抽象类中

4、抽象方法修饰符中有abstract关键字,并且抽象方法没有实现体。以“;”结束

5、非抽象的类继承抽象类,必须将抽象类中的方法进行实现

6、abstract和final共存

package com.JavaStudy.study0509;

abstract class Account {

    //抽象方法没有实现体
    abstract void m(double money);

    Account(){
        super();//调用Object的缺省构造器
    }

    public void n(){
        System.out.println("n");
    }

    public static void main(String[] args){
        //抽象类不能进行实例化
        //Account account = new Account();

        DebitAccount debitAccount = new DebitAccount();
        debitAccount.m(10000.0);
        debitAccount.n();//子类继承父类可以用父类中的成员方法

        DepositAccount depositAccount = new DepositAccount();
        depositAccount.m(20000.0);
    }
}

//非抽象类继承抽象类
class DepositAccount extends Account{

    //非抽象类继承抽象类,必须将抽象方法进行实现(即增加实现体)
    void m(double money){
        System.out.println("储蓄账户取款"+money+"元");
    }
    DepositAccount(){
        super();
    }
}

class DebitAccount extends Account{
    void m(double money){
        System.out.println("信用账户取款"+money+"元");
    }
    DebitAccount(){
        super();
    }

}

 二、final关键字的作用
1、final可以用来修饰引用,方法和类。
  1、如果引用是基本数值类型,则该引用为常量,该值无法修改。并且final修饰的常量必须赋值

  2、如果引用为引用数据类型,比如对象,数组,则该对象,数组本身的数值是可以修改的,但指向该对象或数组的内存地址

  3、如果引用是类的成员变量,则必须当场赋值,否则编译器无法通过

package com.JavaRestudy.Test08;

/**
 * @Author wufq
 * @Date 2020/7/6 14:13
 */
public class Demo {
    //final修饰的常量,必须要赋值
    final int a=1;
    //final修饰的基本数据类型常量,不能修改
    //a = 10;

    public static void main(String[] args){
        Person p = new Person();
        //final修饰的类,类里面的常量值可以修改,但是内存地址不能修改
        p.name = "ab";
        System.out.println(p);

        //final修饰的数组,可以改变值
        final int[] data = {1,4,33};
        data[1] = 555;
        for(int i=0;i<data.length;i++){
            System.out.print(data[i]);
        }
    }
}

final class Person{
    String name = "cs";
}

2、用来修饰一个方法

当使用final修饰方法时,这个方法将是一个最终的方法,不能被重写但是可以被子类继承(即:子类可以使用这个方法)

package com.JavaRestudy.Test08;

/**
 * @Author wufq
 * @Date 2020/7/6 14:33
 */
public class ZhiYe {
    public final void read(){
        System.out.println("读");
    }

    public void write(){
        System.out.println("写");
    }

}

class Teacher extends ZhiYe{

    //final修饰的方法,不能被重写
//    public void read(){
//
//    }
    
    public void write(){
        System.out.println("子类重写父类write方法");
    }
    public static void main(String[] args){
        Teacher teacher = new Teacher();
        teacher.write();
        //final修饰的方法,可以被之类继承
        teacher.read();//
    }
}

3、final修饰类,则此类不能被继承

原文地址:https://www.cnblogs.com/frankruby/p/12867735.html