继承和接口总结

继承
人类是一个大类People,而儿童Child、青年人Youth、中年人Adult、老年人Elder都属于人类。后四种类有人类的共同特征,能完成人类公有的许多行为,当然,也有一些本类特有的特征和特定的行为。此时,我们将后四种类与人类的关系叫做“子类”和“父类”,子类“继承”父类。生活中还有很多场景也有关于继承。
eg.
public class People(){}
//继承的关键字是extends
public class Child extends People(){}
//子类继承到父类所有的属性和方法(除构造器),能调用的属性和方法却是有限的
public class Youth extends People(){}


重写
当子类和父类用一个同名方法,但是子类的实现却和父类不同、有其特殊性时,用到方法的重写。重写是指方法定义相同,但是实现不同,存在于父子类之间。
eg.
public class People(){
public void walk(){
System.out.println("I'm walking...");
}
}
//年青人属于人,都能走路,但他们走路比普通人而言,更走的轻快和开心;喜事用 //到了方法的重写
public class Youth(){
public void walk(){
System.out.println("I walk very fast and happy.");
}
}


自动转型
一个学生,是可以学习的。如果一个学生想用大学生、小学生、高中生的学习方法时,是不是要在学生类里写n个不同类别学生的学习方法呢?这时,用到自动转型。可以大量减少代码的重复编写:自动转型后的父类对象,可以直接调用子类已经重写的方法。
eg.
Student stu1 = new USStudent(); //stu1自动转型为学生类对象
Student stu2 = new SeniorStudent(); //stu2自动转型为学生类对象
stu1.study(); //学生类对象调用的是大学生的学习方法
stu2.study(); //学生类对象调用的是中学生的学习方法


多态
一个学生能学习,但是引入了自动转型机制、大学生、中学生、小学生继承了学生类、方法重写了之后。父类对象调用一个study()方法,结果是不确定的。又如,我们大家都是人,但是由于我们每个人都是独特的。这就是多态最直接的体现。
eg.
public class Student(){
System.out.println("0000");
}
public class USStudent() extends Student{
System.out.println("1111");
}
public class SeniorStudent extends Student(){
System.out.println("2222");
}
//多态的体现:父类对象两次调用study,结果是完全不同的
Student stu1 = new USStudent();
stu1.study();
Student stu2 = new SeniorStudent();
stu2.study();


接口
比如,我们要画图形,LINE、OVAL、RECT等都继承自DrawImage类,但是每个子类画图的方法都是完全不一样的,此时,父类里面不需要有什么具体实现就行。这时,接口出现了。它的作用就是给其他类继承(这里用到一个特殊的关键字:interface,是特殊的继承),让其他类实现里面很抽象的方法。
eg.
//接口里的方法都是抽象的,没有方法体;属性都是常量;不能实例化一个对象
public interface DrawImage(){
public void draw();
}
public class LINE implements DrawImage(){
public void drawLine(){
System.out.println("draw a line");
}
}
public class OVAL implements DrawImage(){
public void drawOval(){
System.out.println("draw a oval");
}
}
public class LINE implements DrawImage(){
public void drawRect(){
System.out.println("draw a rect");
}
}


抽象类
上一个“接口”要求实现它的类实现所有它的方法,这样也许会是代码态冗长,因为有的方法根本就没有实现的必要。抽象类出现了。继承抽象类的类必须实现其抽象方法,但是对于普通方法,是可以按照编程的需要选择性实现的。这样,代码会更简洁。
eg.
MouseAdapter抽象类(具体在书本上;注意抽象类也不能实例化一个对象)
<think>嗯,用户想了解继承接口的区别以及使用场景。好的,首先我需要回顾一下继承接口的基本概念。根据引用[1],继承是子类从父类获取属性方法,实现代码复用多态。而引用[3]提到接口是抽象方法的集合,类通过继承接口来实现这些方法。 那它们的区别可能包括实现方式、构造方法、多继承支持等。比如,引用[2]指出抽象类可以有构造方法,而接口不能。另外,接口支持多实现,而继承只能是单继承,这一点可能需要强调。 使用场景的话,继承适合“is-a”关系,比如狗是动物。接口更适合“has-a”能力,比如飞行能力,不同的类都可以实现这个接口。引用[4]中的例子,PhoneCamera实现Usb接口,说明接口用于定义共同的行为。 另外,引用[5]提到代理模式中使用接口解耦,这也说明接口在需要多态松散耦合时的优势。而继承在复用代码扩展父类功能时更合适。 需要确保回答结构清晰,分点说明区别使用场景,并结合例子。可能还要注意用户提到的编程语言,比如JavaPHP的例子,但用户问题不限定语言,所以保持一般性。 还要检查是否有遗漏的区别,比如接口不能有字段(引用[4]),而抽象类可以有成员变量。还有接口的方法默认是public,而抽象类可以有不同访问修饰符。 总结下来,回答应该包括定义、核心区别、使用场景,并引用相关文献。最后生成相关问题,比如多继承问题、设计模式中的应用等。</think>### 继承接口的区别及使用场景 #### 一、核心定义 1. **继承** 继承是面向对象编程中实现**代码复用****多态性**的机制。子类通过继承父类,可以直接获取父类的属性方法(例如字段、非私有方法等),并可以扩展或重写父类的功能。 - 示例:若`Dog`类继承`Animal`类,则`Dog`自动拥有`Animal`的`eat()`方法[^1]。 2. **接口** 接口是**抽象行为的集合**,仅定义方法签名(不实现具体逻辑)。类通过实现接口来承诺提供接口中所有方法的具体实现。 - 示例:`Usb`接口定义`connect()`方法,`Phone``Camera`类分别实现该方法以满足不同设备的连接逻辑[^4]。 --- #### 二、核心区别 | **特性** | **继承** | **接口** | |------------------|-----------------------------|-----------------------------| | 实现方式 | 单继承(大多数语言中) | 多实现 | | 代码复用 | 直接复用父类代码 | 仅定义行为,需自行实现 | | 构造方法 | 可包含构造方法[^2] | 不能有构造方法 | | 成员变量 | 可包含字段常量 | 仅能定义常量(如Java) | | 设计目的 | 描述“是什么”(`is-a`关系) | 描述“能做什么”(`has-a`能力)| --- #### 三、使用场景 1. **优先使用继承的场合** - **强层次关系**:当子类是父类的特殊化时(如`Bird`继承`Animal`)。 - **代码复用需求**:多个子类需共享父类的公共属性方法。 - **多态扩展**:通过重写父类方法实现不同子类的差异化行为。 2. **优先使用接口的场合** - **多态解耦**:需要不同类支持同一行为但实现不同(如`Flyable`接口被`Bird``Drone`实现)。 - **突破单继承限制**:在单继承语言(如Java)中,通过接口实现多重“能力”组合[^3]。 - **定义契约**:强制要求类实现特定方法(如数据存储接口`save()``load()`)。 --- #### 四、代码示例 ```java // 继承示例:Dog继承Animal class Animal { void eat() { System.out.println("Eating..."); } } class Dog extends Animal { } // Dog自动拥有eat()方法 // 接口示例:Flyable定义飞行能力 interface Flyable { void fly(); } class Bird implements Flyable { public void fly() { System.out.println("Flapping wings"); } } class Drone implements Flyable { public void fly() { System.out.println("Using propellers"); } } ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值