【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修饰类,则此类不能被继承