类的继承与接口示范

定义父类Phone函数:
public abstract class Phone {
private String brand;
private int price;
public Phone() {}
public Phone(String brand,int price) {
this.brand=brand;
this.price=price;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public abstract void sendMessage();
public abstract void call();
}

定义接口:
public interface Iplay {
public void playGame();
}
定义旧手机类继承手机类:
public final class OldPhone extends Phone {
public OldPhone() {}
public OldPhone(String brand,int price) {
super(brand,price);
}

public void sendMessage() {
	System.out.println("用旧手机发短信");
}
public void call() {
System.out.println("用旧手机打电话");
}

}
定义新手机类继承手机类并连接接口:
public final class NewPhone extends Phone implements Iplay{
public NewPhone() {}
public NewPhone(String brand,int price) {
super(brand,price);
}

@Override
public void sendMessage() {
	System.out.println("用新手机发短信");	
}

@Override
public void call() {
System.out.println("用新手机打电话");
	
}

@Override
public void playGame() {
	System.out.println("新手机可以玩王者荣耀");	
}

}
定义测试类:
public class Test {
public static void main(String[] args) {
OldPhone op=new OldPhone();
op.setBrand(“摩托罗拉”);
op.setPrice(200);
System.out.println(op.getBrand()+"\t"+op.getPrice());
op.sendMessage();
op.call();
System.out.println("-----------------------");
NewPhone np=new NewPhone();
np.setBrand(“iphone”);
np.setPrice(8000);
System.out.println(np.getBrand()+"\t"+np.getPrice());
np.sendMessage();
np.call();
np.playGame();

}	

}
运行结果:
摩托罗拉 200
用旧手机发短信
用旧手机打电话

iphone 8000
用新手机发短信
用新手机打电话
新手机可以玩王者荣耀

### 头歌平台中继承概念 在编程教育平台上,如头歌(EduCoder),对于Java语言的教学通常会严格遵循官方语法规定并提供实践环境来帮助学生理解面向对象编程的核心概念之一——继承。 #### 单继承机制 Java采用的是单继承模型,在这种结构下每一个子仅能直接继承自单一父。这意味着当存在两个独立基各自拥有相同签名的方法时,任何试图让新创建的子同时扩展这两个基的行为都会引发编译期错误,因为无法决定究竟应该采纳哪一个版本的方法实现[^1]。 ```java // 假设尝试使ClassA 同时继承 ClassB 和 ClassC 将导致编译失败 class ClassB { public void methodD() { /* ... */ } } class ClassC { public void methodD() {/* ... */} } // 下面这段代码会造成编译报错 // class ClassA extends ClassB, ClassC {} // 错误示范 ``` #### 接口多实现弥补单继承局限性 为了克服上述提到由于单继承带来的灵活性不足问题,Java引入了接口这一抽象成员集合体作为补充方案。通过允许一个去实现多个不同接口的方式间接实现了功能上的多重继承效果而不必担心命名冲突等问题的发生。 #### ES6 中 JavaScript 的继承 不同于 Java 的强型静态检查方式,JavaScript 是一种动态弱型的脚本语言。尽管如此,在 ECMAScript 2015 (ES6) 版本之后也加入了基于原型链模拟传统 OOP 风格下的 `class` 关键字以及相应的继承模式支持[^2]: ```javascript // 定义一个人物基础模板 class Person { constructor(name, age) { this.name = name; this.age = age; } greet() { console.log(`Hello! My name is ${this.name}.`); } } // 创建学生的派生别 class Student extends Person { study(subject) { console.log(`${this.name} studies ${subject}`); } } ``` 以上展示了如何利用 `extends` 来建立父子关系,并且自动获取到所有公开属性及行为而无需重复声明;同时也保持了原有构造函数逻辑不变的基础上增加了额外的功能特性。 #### 是否需要完全覆写父方法? 并非总是必要覆盖掉所有的超方法。实际上,《Thinking in Java》建议开发者思考是否真的有必要执行向下转型操作之前先评估一下当前场景里是否有更好的替代品可用。只有当你确实需要用到特定于子实体特性的增强版算法或者其他改进之处才值得去做这样的改动[^3]。 #### 默认隐式继承 Object 无论何时何地只要是在编写新的非内部匿名定义语句时如果没有特别指明其上层关联的话,默认情况下它们都将被视作是从 java.lang.Object 这个顶级公共祖先那里衍生出来的后代成员之一[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值