java子类继承

这篇博客探讨了JAVA中的类层次结构,强调了单重继承的概念,即一个类只能有一个直接父类。JAVA中的子类继承父类的所有方法和成员变量,但不能继承构造方法。虽然JAVA不支持多重继承,但可以通过接口实现类似的功能。博客还对比了C++的多重继承,并举例说明了如何通过继承来描述现实世界中的关系,如工人可以是歌手也可以是服务员。

JAVA中的类层次结构为树状结构,这后面的自然界描述事物是类似的,例如我们可以将动物划分为哺乳动物,爬行动物,又会对这两类动物继续细分。86b9a85309d145fd9f84a373aa6f3f24.jpg

 哺乳动物和爬行动物都可以看作动物的子类。同样的,鲸和狗可以看做哺乳动物的子类。

在JAVA中,我们给可以用子类和父类来刻画事物。大的更一般的类,可以看个父类,小的更特殊的类,可以看做子类。

子类与父类的关系是子类对象“ is a”(is a kind of)父类对象,也就是说,子类中的一个成员也是父类中的一个成员。例如我们说的狗是哺乳动物,也可以说它是动物。

特点:

单重继承:JAVA只允许从一个类中扩展类,也就是说,任何一个除了Object的类,只有一个父类(这里说的是直接父类)。子类继承所有父类(包括直接父类和间接父类)的方法和成员变量。但遗憾的是,他并不能继承构造方法。需要用到super来调用父类中的构造方法,有兴趣的小伙伴可以去搜索一下,小龙我不太清楚。

与单重继承不同的是,在C++中,多重继承也是“is-a”的关系,它允许一个类继承自多个类,只需要将继承的类使用逗号隔开即可,像下面这样:

class DerivedClass : public BaseClass1, public BaseClass2 {……}
class DerivedClass : public BaseClass1, BaseClass2 {……} // BaseClass2 is a private base

多重继承中每一个被继承的基类都需要设置访问限定符,根据需要可以使用不同的访问限定符,不写默认为private

例如设置一个基类Worker表示工人,然后工人可以是歌手也可以是服务员,我们使用两个类继承自这个基类,Singer和Waiter,最后,我们可以定义一个既是歌手有时服务员的类,所以它同时继承自Singer和Waiter,他们的关系就像下边这样:

class Worker {……}
class Singer : public Worker {……}
class Waiter : public Worker {……}
class SingingWaiter : public Singer, public

在JAVA中,也保留了多重继承的方法,我们可以通过接口来继承多个类。

 

 

 

 

### Java 子类继承父类的示例语法 在 Java 中,子类通过 `extends` 关键字继承父类。以下是关于子类继承父类的一些重要概念及其对应的示例代码。 #### 1. 基本继承结构 子类可以通过 `super()` 方法显式调用父类的构造函数,并传递必要的参数[^1]。如果没有显式的 `super()` 调用,默认会调用无参的父类构造函数。如果父类没有无参构造函数,则必须提供带参的 `super()` 调用来初始化父类实例。 ```java public class Parent { public Parent(String name) { System.out.println("Parent constructor called with name: " + name); } } public class Child extends Parent { public Child() { super("ChildName"); // 显式调用父类构造函数并传入参数 System.out.println("Child constructor called"); } } ``` #### 2. 多层继承 Java 支持多层继承,在这种情况下,子类不仅继承了直接父类的方法和属性,还可能间接继承更上一层祖先类的内容[^2]。例如: ```java class Grandparent { public void grandMethod() { System.out.println("Grandparent method invoked."); } } class Parent extends Grandparent { public void parentMethod() { System.out.println("Parent method invoked."); } } class Child extends Parent { public void childMethod() { System.out.println("Child method invoked."); } public static void main(String[] args) { Child c = new Child(); c.grandMethod(); // 可以访问祖类方法 c.parentMethod(); // 可以访问父类方法 c.childMethod(); // 访问自己的方法 } } ``` #### 3. 子类使用父类的依赖注入 在某些场景下,父类可能会持有某种依赖关系(如外部服务),而子类需要利用该依赖完成特定功能。此时可通过构造器或 setter 注入的方式共享依赖对象[^3]。 ```java class Dependency { public void performAction() { System.out.println("Dependency action performed."); } } class BaseClass { protected Dependency dependency; public BaseClass(Dependency dep) { this.dependency = dep; } public void useDependency() { if (dependency != null) { dependency.performAction(); } } } class SubClass extends BaseClass { public SubClass(Dependency dep) { super(dep); // 将依赖注入到基类中 } @Override public void useDependency() { System.out.println("SubClass using dependency..."); super.useDependency(); } } ``` #### 4. 子类访问父类成员变量 根据父类成员变量的访问控制权限(private, protected 或 public),子类可以选择不同的方式来操作它们。对于私有字段,通常需借助 getter 和 setter 方法;而对于受保护或者公开的字段,则可直接引用[^4]。 ```java class SuperClass { private String secret = "Secret Data"; protected int number = 42; public String getSecret() { return secret; } } class DerivedClass extends SuperClass { public void displayInfo() { System.out.println("Protected variable value: " + number); System.out.println("Private field via accessor: " + getSecret()); } } ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

热血少年鸡小龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值