【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修饰类,则此类不能被继承
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫