一、继承
-
成员变量
-
构造方法
-
成员方法
-
继承概述-------什么是继承?
-
子承父业
-
让类与类之间产生关系,子父类关系
-
-
Java如何实现继承
-
extends
-
package 继承的概述01; public class Demo { } class A{ } /* * A:父类 、基类、超类 * * */ class B extends A /*B类继承了 A类*/{ }
-
继承的具体使用(成员变量之间的特点)
package 继承的具体使用02; public class Demo { public static void main(String[] args) { B b = new B(); System.out.println(b.a); } } class A{ int a = 13; } class B extends A{ }
继承之成员变量之间的关系结论:
-
成员变量是可以被继承的
-
如果成员变量同名,优先使用自己的
-
注意:私有的成员变量无法被继承
package 继承的具体使用02; public class Demo { public static void main(String[] args) { B b = new B(); //操作 赋值 取值 System.out.println(b.a); //赋值 b.a = 100; System.out.println(b.a); } } class A{ private int a = 13; } class B extends A{ }
-
构造方法之间的特点
-
-
-
实验结果是能被继承
-
实验代码
-
-
package 继承之构造方法之间的关系03; public class Demo { public static void main(String[] args) { B b = new B(); } } class A{ public A(){ System.out.println("我是A类的构造方法"); } } class B extends A{ public B(){ System.out.println("我是B类的构造方法"); } }
-
成员方法
package 继承之成员方法之间的关系04; public class Demo { public static void main(String[] args) { B b = new B(); b.m(); } } class A{ public void m(){ System.out.println("我是A的m方法"); } } class B extends A{ }
-
可以被继承
-
继承的好处和弊端
-
继承的好处
-
提高了代码的复用性,提高了代码的维护性
-
让类与类之间产生了关系,是多态的前提
-
继承的弊端
-
类的耦合性增强了。
-
开发的原则:高内聚,低耦合。
-
耦合:类与类的关系
-
内聚:就是自己完成某件事情的能力
-
-
-
-
Java中类的继承特点
-
Java只支持单继承,不支持多继承。(一个儿子只能有一个爹) 有些语言是支持多继承,格式:extends类1,类2,...
-
Java支持多层继承(继承体系)
-
如果想用这个体系的所有功能用最底层的类创建对象
-
如果想看这个体系的共性功能,看最顶层的类
继承的注意事项和什么时候使用继承
-
继承的注意事项
-
子类只能继承父类所有非私有的成员(成员方法和成员变量)
-
子类不能继承父类的构造方法,但是可以通过super(马上讲)关键字去访问父类构造方法。
-
不要为了部分功能而去继承
-
什么时候使用继承
-
-
如果有两个类A,B。只有他们符合A是B的一种,或者B是A的一种,就可以考虑使用继承。
-
-
继承中成员变量的关系(掌握)
继承中构造方法的关系
-
案例演示
-
子类中所有的构造方法默认都会访问父类中空参数的构造方法 为什么呢?
-
因为子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,一定要先完成父类数据的初始化。
-
其实:每一个构造方法的第一条语句默认都是:super()Object类最顶层的父类。
-
-
继承中构造方法的注意事项
-
案例演示
-
父类没有无参构造方法,子类怎么办?
-
super解决
-
this解决
-
-
-
注意事项
-
super(…)或者this(….)必须出现在构造方法的第一条语句上
-
-
继承中成员方法关系
-
案例演示
-
不同名的方法
-
子类使用父类的
-
-
同名的方法
-
使用子类自己的
-
-
package 继承之成员方法之间的关系补充10; public class Demo { public static void main(String[] args) { B b = new B(); b.m(); } } class A{ public void m(){ System.out.println("我是AM"); } } class B extends A{ public void m(){ System.out.println("我是BM"); } }
-
方法重写概述及其应用
-
什么是方法重写
-
重写:子父类出现了一模一样的方法声明部分(注意:返回值类型可以是子父类,这个我们学完多态讲)
-
要有继承关系
-
方法的声明一模一样
-
方法体不一样
-
-
方法重写的应用:(忽略)
-
当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法。这样,即沿袭了父类的功能,又定义了子类特有的内容。
-
-
方法重写的注意事项
-
父类中私有方法不能被重写
-
因为父类私有方法子类根本就无法继承子类重写父类方法时,访问权限不能更低 最好就一致
-
父类静态方法,子类也必须通过静态方法进行重写
-
其实这个算不上方法重写,但是现象确实如此,至于为什么算不上方法重写多态中我会讲解(静态只能覆盖静态)
-
-
子类重写父类方法的时候,最好声明一模一样。
-
-
-
方法重写:子类中出现了和父类中方法声明一模一样的方法。与返回值类型有关,返回值是一致(或者是子父类)的
-
方法重载:本类中出现的方法名一样,参数列表不同的方法。与返回值类型无关
-