java学习笔记(6)--面向对象之-继承
目录
3.关系(框架):接口负责定义能做什么---继承类负责定义具体做什么---main负责调用执行
前言:面向对象有三大特征:封装、继承、多态。这一节我们主要介绍继承。
一.类与接口之间的继承:
1.关键字:implements
2.接口的介绍:
接口(即interface) 是与类同级别的结构,也可以作为一种数据类型。由属性与方法组成。
(1)属性:默认由 static final 修饰的
(2)方法:默认为抽象方法,没有方法体
3.关系(框架):接口负责定义能做什么---继承类负责定义具体做什么---main负责调用执行
4.下面介绍一个具体的例子:
package CZX0125;
//接口
public interface Fly {
void fly();
}
//类bird
class bird implements Fly{
public void fly() {
System.out.println("小鸟通过翅膀煽动飞了200米");
}
}
//类air
class air implements Fly{
public void fly() {
System.out.println("飞机通过引擎推进 飞行了2000公里");
}
}
class Main{ //class Main 的作用是提供一个程序的入口点
public static void main(String[] args) {
Fly f1=new bird();
Fly f2=new air();
f1.fly();
f2.fly();
}
}
运行结果:

必要的解释:
1.接口Fly只声明了方法fly,但没有具体实现方法fly(即没有方法体)
2.class bird/air implements Fly{ }定义一个名为 bird/air 的类,让它实现 Fly 这个接口里的所有方
法,并重写所有方法(含方法声明与方法体)。
3.class Main 的作用是提供一个程序的入口点,因为main也是一个方法,必须在类里面。
4.
这一片段的作用有:
创建 bird 和 air 的实例(对象)
把它们赋值给 Fly 类型的引用
调用 fly() 方法,输出不同的飞行行为
5.注意!!!:
1.普通类实现接口后,必须重写并实现接口中所有的抽象方法(补充方法体)
2.接口中的方法默认是 public 修饰的,实现类重写方法时,必须也用 public 修饰
3. Java 接口中,所有方法默认都是 public abstract 的,只不过接口中的方法默认省略了public abstract 。如 Fly 接口里的 void fly(); 本质上就是 public abstract void fly();

所以继承接口的类 在重写方法时,方法必须加上public,而abstract修饰的方法是没有方法体、只有声明的抽象方法,所以不用写abstract,如

4.
bird f1=new bird(); 可以写成 Fly f1=new bird();的原因:
是java多态类的核心写法(即向上转型):即父类型引用指向子类型对象的写法
(接口等价于父类型,是更抽象、通用的类型;实现类,属于更具体的子类型;)
二.类与类之间的继承:
1.关键字:extends
2.格式:class 子类名 extends 父类名{ }
可以继承属性、方法、类型
3.注意:
1.继承关系(is-a)不是包含关系(has-a)。父类与子类之间没有包含关系子类的行为/属性是父类的继承扩展,子类是父类的一种特殊类型
继承关系判断口诀:子类 is a 父类
例如:Dog is a animal
2.子类不会拥有父类的所有属性和方法
3.子类可以直接复用父类中符合权限要求的属性和方法,无需重复编写代码,同时还能新增自己独有的成员,或重写父类方法实现个性化逻辑。
4.一个子类只能直接继承一个父类
4.下面介绍一个具体的例子:
package CZX0810;
public class Student {
String name;
int age;
int id;
int score;
public void showInfo() {
System.out.println("- 学生信息 -");
System.out.println(name);
System.out.println(age);
System.out.println(id);
System.out.println(score);
}
public void read(){
System.out.println(name + "正在阅读");
}
}
class UNStudent extends Student {
int cet_4;
// 子类重写父类方法 ,进行功能的补充 重构 增加,子类对象可以优先调用重写之后的 多态的实现之一
public void showInfo() {
super.showInfo(); // this 指代本类自己 super 指代本类的父类
System.out.println("英语4级成绩:"+cet_4);
}
}
class MIDStudent extends Student {
int mid_math;
public void read(){
System.out.println(name+"正在阅读高中数学书,数学分数是:"+mid_math);
}
}
class StuMan {
public static void main(String[] args) {
UNStudent unstu = new UNStudent();
MIDStudent midStu = new MIDStudent();
unstu.name = "张三";
unstu.age = 20;
unstu.cet_4 = 500;
midStu.name = "李四";
midStu.age = 15;
midStu.mid_math = 140;
midStu.showInfo();
unstu.showInfo();
midStu.read();
unstu.read();
}
};
运行结果:

注意:
等同于
,运行结果相同。
更多推荐
所有评论(0)