JavaSE--继承
一、继承extends
1、继承的作用
基本作用:子类继承父类,代码可以得到复用
主要作用:因为有了继承关系,才有了后期的方法覆盖和多态机制
2、继承的语法结构
class 类名 extends 父类名{ 类体; }
// 使用继承机制来解决代码复用问题。 // 继承也是存在缺点的:耦合度高,父类修改,子类受牵连。 public class ExtendsTest02{ public static void main(String[] args){ // 创建普通账户 Account act = new Account(); act.setActno("1111111"); act.setBalance(10000); System.out.println(act.getActno() + ",余额" + act.getBalance()); // 创建信用账户 CreditAccount ca = new CreditAccount(); // 这两个方法子类从父类继承过来的 ca.setActno("2222222"); ca.setBalance(-10000); ca.setCredit(0.99); System.out.println(ca.getActno() + ",余额" + ca.getBalance() + ",信誉度" + ca.getCredit()); } } // 银行账户类 // 账户的属性:账号、余额 class Account{ // 父类 // 属性 private String actno;// 私有的也是可以继承的,只是子类中无法直接访问 private double balance; // 构造方法 public Account(){ } // 除了构造方法 其他的都会继承 public Account(String actno, double balance){ this.actno = actno; this.balance = balance; } // setter and getter public void setActno(String actno){ this.actno = actno; } public String getActno(){ return actno; } public void setBalance(double balance){ this.balance = balance; } public double getBalance(){ return balance; } } // 其它类型的账户:信用卡账户 // 账号、余额、信誉度 class CreditAccount extends Account{ //子类 // 属性 private double credit; // 构造方法 public CreditAccount(){ } public void doSome(){ //错误: actno 在 Account 中是 private 访问控制 //System.out.println(actno); // 间接访问 //System.out.println(this.getActno()); System.out.println(getActno()); } // setter and getter方法 public void setCredit(double credit){ this.credit = credit; } public double getCredit(){ return credit; } }
3、继承的相关特性
1)B类继承A类,则称A类为超类(superclass)、父类、基类,B类则称为子类(subclass)、派生类、扩展类。
2)java 中的继承只支持单继承,不支持多继承,C++中支持多继承,这也是 java 体现简单性的一点,换句话说,java 中不允许这样写代码:class B extends A,C{ } 这是错误的。
3)虽然 java 中不支持多继承,但有的时候会产生间接继承的效果
例如:class C extends B,class B extends A,也就是说,C 直接继承 B,其实 C 还间接继承 A。
4)java 中规定,子类继承父类,除构造方法不能继承之外,剩下都可以继承。但是私有的属性无法在子类中直接访问(父类中private修饰的不能在子类中直接访问。可以通过间接的手段来访问。)
5)java 中的类没有显示的继承任何类,则默认继承 Object类,Object类是 java 语言提供的根类(老祖宗类),也就是说,一个对象与生俱来就有 Object类型中所有的特征。
6)继承也存在一些缺点,例如:CreditAccount 类继承 Account 类会导致它们之间的耦合度非常高,Account 类发生改变之后会马上影响到 CreditAccount 类
4、什么时候使用继承
凡是采用“is a”能描述的都可以继承
例如:Cat is a Animal猫是一个动物
Dog is a Animal狗是一个动物
CreditAccount is Account......
二、Object类
1、Object类提供了哪些方法
1)Java内置了一套庞大的类库,我们可以基于类库进行二次开发,也就是jdk内置的类库实现了很多基础的功能,例如:String是sun编写的字符串类、System是sun编写的系统类
2)jdk源代码位置:jdk文件目录下lib下的src文件夹
3)当源码中的一个方法以“;”结尾,并且修饰符列表中有“native”关键字,表示底层调用c++写的dll程序(dll动态链接库文件)
// Object类中的一个方法 private static native void registerNatives();
public boolean equals(Object obj){ return (this == obj); }
public String toString(){ return getClass().getName() + "@" + Integer.toHexString(jashCode()); } // 如果使用System.out.println()这个方法输出一个引用的话 System.out.println(引用类型); // 底层会自动调用toString方法,输出toString方法的结果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?