面向对象的三大特征:
封装,继承,多肽;
我们先说一说继承:
- 作用:代码的复用
- 通过extends来实现继承
- 超类:父类:共有的属性和行为
- 派生类:特有的属性和行为
- 派生类既可以访问派生类自己的,也可以访问超类的,但是超类不能访问派生类的.
- 一个超类可以有多个派生类,但是一个派生类只能有一个超类,超类相当于亲爹,只有一个,(我们之后还有干爹,这个可以有多个)--------继承是单一继承的.
- 继承具有传递性,在java中所有的类都继承自Object,所有但我们继承一个不是Object的类时,继承是单一的,所有此时不在默认的继承Object,但是我们可以通过传递性,继承超类继承的Object,所以也继承Objiect.
class aoo{ //可以访问a
int a;
}
class boo extends aoo{//可以访问a+b
int b;
}
class coo extends boo{//可以访问a+b+c
int c;
}
class doo extends coo{//可以访问a+b+c+d
int d;
}
继承是具有传递性的
java规定:构造派生类之前必须先构造超类
- 在派生类的构造方法中若没有调用超类的构造方法,则默认super()调用超类的构造方法.
- 在派生类的构造方法中,若自己调用了超类的构造方法,则不在默认提供
- >注意:super()调用超类的构造方法,必须位于派生类构造方法的第一行.
super:指代当前对象的超类对象(还可以想想this的用,和super对比).
super.成员变量名-------访问超类成员(一般不用)
super.方法名---------调用超类的方法
super()------------调用超类的构造方法
演示派生类中调用超类构造方法
注:继承的是超类中的成员变量和普通方法,而不包括构造方法,超类的构造方法是被派生类通过super来调用的
派生类中调用超类的有参构造方法
class Aoo{
Aoo(int a){
System.out.println("超类的构造方法");
}}
class Boo extends Aoo{
Boo(){
super(5);
}}
如果Aoo没有自己写构造方法,Boo继承Aoo,name默认情况下Boo的代码如下
class Boo extends Aoo{
Boo(){
super();//它一定在第一行
System.out.println("派生类的构造方法");
}}
向上造型:本质上就是多肽
超类型引用指向派生类对象
能点出来什么,看引用类型.
public class UploadDemo {
public static void main(String[] args) {
Eoo o1 = new Eoo();
o1.e = 1;
o1.show();
//o1.f = 2; //编译错误,超类不能访问派生类的
//o1.test(); //编译错误
Foo o2 = new Foo();
o2.f = 1;
o2.test();
o2.e = 2; //正确,派生类可以访问超类的
o2.show(); //正确
//能点出来什么,看引用的类型------------这是规定,记住就可以了
Eoo o3 = new Foo(); //向上造型
o3.e = 1;
o3.show();
//o3.f = 2; //编译错误,o3是Eoo类型,所以只能访问Eoo里面的
//o3.test(); //编译错误
}
}
class Eoo{
int e;
void show(){
}
}
class Foo extends Eoo{
int f;
void test(){
}
}
Class Aoo{
Boo o1=new Coo();
o1.show();
o1.c=3;//编译错误,o1是Boo类型,能点出来什么看超类.
}
Class Boo {
int b;
void show(){
System.out.println("0")}
}
Class Coo extends Boo{
int c;
void show(){
System.out.println("1")}
}
何时向上造型,
多种角色能干的事情都一样的时候,可以将多种角色同一造型到超类数组中,实现代码的复用.
超类的意义:
- 封装共有的属性和行为----------实现代码的复用
- 为所有派生类提供了统一的类型--------向上造型,(实现代码的复用)
本文详细讲解了面向对象编程中的继承特性,包括继承的作用、如何实现继承、派生类与超类的关系、构造方法的调用规则及向上转型的应用场景。

被折叠的 条评论
为什么被折叠?



