这是我前段时间学习面向对象的课堂总结,正好是继承和多态,有好多代码体现,希望可以帮到你
刚刚自己画的内存图和继承图解传不了,如果你还不明白的话,私下问我,我给你发图解
01-继承的概述
| 例子: 爹的票子、车子、房子最终都是我的
| 我的姓 是由 爹而来的
| 继承的概述.
/*
继承的概述
多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,
那么多个类无需再定义这些属性和行为,只要继承那个类即可。
多个类可以称为子类,单独这个类称为父类或者超类
继承的出现提高了代码的复用性。
继承的出现让类与类之间产生了关系,提供了多态的前提。
定义继承需要注意:
不要仅为了获取其他类中某个功能而去继承
类与类之间要有所属( " is a " )关系,xx1是xx2的一种。
案例: 爹的房子、票子、车子 最终统统是我的
爹姓李,我跟着爹的姓, 这也是继承的体现
好处: 爹的内容 儿子可以用
*/
class Teacher {
public void eat (){
System.out.println("吃饭");
}
}
class Student {
public void eat(){
System.out.println("吃饭");
}
}
/*
发现多个类中 有一样的内容,将一样的内容 抽取出来到一个类的中的,
原有的类就不需要在定义这些内容了.
*/
class Person {
public void eat() {
System.out.println("吃饭");
}
}
/*
当前这个类 定义好了, 但是怎么和其他类进行相互访问呢?
可以让类与类之间产生关系, 继承关系
java中,可以通过关键字 extends 来实现继承关系
格式:
class 儿子类 extends 父亲类 {......}
*/
class Teacher extends Person { }
class Student extends Person { }
03-继承的特点(子类可以访问父类非私有的内容)
| 子类可以访问父类非私有的内容
| 例子:你和媳妇开心,你儿子不能和你媳妇开心
/*
继承的特点:
子类可以直接访问父类中的非私有的属性和行为。
案例: 你和你媳妇在开心(开心的方法 必须要私有), 你儿子能继承和你媳妇开心的方法吗? 不能
*/
class Fu {
int num = 10;
private int num2 = 20;
public void show(){
System.out.println("哈哈");
}
}
class Zi extends Fu {
}
class ExtendsDemo {
public static void main(String[] args) {
Zi z = new Zi();
System.out.println(z.num);
z.show();
System.out.println(z.num2);// 错误: num2可以在Fu中访问private
}
}
04-继承的特点(Java只支持单继承,不支持多继承)
| Java只支持单继承,不支持多继承
| 亲爹只有一个,不能多个
/*
多态的成员
成员变量
编译看左边的父类,执行看左边的父类
*/
class Fu {
int num = 10;
}
class Zi extends Fu {
int num = 20;
int num2 = 30;
}
class DuoTaiDemo2 {
public static void main(String[] args) {
//Zi z = new Zi();
//System.out.println(z.num);
//Fu f = new Fu();
//System.out.println(f.num);
//多态的方式
Fu f2 = new Zi();
System.out.println(f2.num);// 错误: 找不到符号 位置: 类型为Fu的变量 f2
//System.out.println(f2.num2);
}
}
05-继承的特点(Java支持多层(重)继承)
| Java支持多层(重)继承
| 姓的案例
/*
继承的特点:
Java支持多层(重)继承(继承体系)
*/
//class Yy extends Object { //Object任何类都有一个祖宗类,叫 Object类
class Yy {
String name = "Li";
}
class Fu extends Yy {
String firstName = "李";
}
class Zi extends Fu {
}
class ExtendsDemo3 {
public static void main(String[] args) {
Zi z = new Zi();
System.out.println(z.firstName);
System.out.println(z.name);
}
}
06-继承的代码体现(成员变量)
| 访问父类成员变量: super.成员变量
| 访问子类成员变量: this.成员变量
/*
继承的代码体现
成员变量:
如果局部变量与成员变量重复,使用 this 关键字来区别
格式:this.成员变量
如果子类与父类中的成员重复时,使用 super 关键字来 区别
格式:super.成员变量
this代表本类对象的引用
super代表父类的引用
变量的使用原则:就近原则
局部位置有,使用局部的变量
成员位置有,使用成员变量
父类位置有,使用父类的成员变量
如果父类位置也没有,报错
*/
class Fu {
int num = 10;
int num2 = 40;
}
class Zi extends Fu{
int num = 20;
public void show(){
int num = 30;
System.out.println(num);
System.out.println(this.num);
System.out.println(super.num);
System.out.println(num2);
}
}
|