1.继承的概述,使用继承的好处
什么是继承?java允许一个类通过extends于另一个建立父子关系,
格式 : 子类extends父类
特点: 子类继承父类之后,就可以直接使用父类的public(其它像private就不可以用)的属性和行为
优点: 提高代码的复用性,父类于子类相同的代码放在父类中,提高扩展性
2.继承的设计规范,内存运行原理
设计规范:子类公用属性和行为放在父类,子类独有属性行为放自己哪里
内存原理:子类对象实际上是由父类设计图共同创建出来(了解即可)
3.继承的特点
类只能单个继承,不能同时继承好几个(原因,多个父类相同的方法,就不知道调用谁的,会矛盾)
可以进行多层继承,就是子类继承父类,父类在继承爷爷类,这时候子类同时具有父类,和爷爷类的public属性和行为
4.方法重写
子类中写了一个和父类相同的方法,名字相同,参数相同。
但是注意可以修饰符不同,返回值也可以不同,但是有个规范,就是子类修饰符要比父类修饰符大,返回值比父类小,
修饰符范围大小顺序 public >protected>默认(就是不写)>private
这里给出范围,解释一下
public :全都可以挎包也可以,
protected: 可以挎包,继承父类可以进行调用,子类可以调用带这修饰符的属性和行为
默认(就是不写):默认范围就是本包里可以调用
private:只能当前类进行调用
总结一下:我们工作还是主要以public 和private 这两个为主的,另外两个虽然不用但是要知道
5.继承后的成员变量和成员方法
代码演示:
可以看见先输出方法的number=100,如果没有方法注释掉就会找类中的number=200,
也可以直接用this调用,父类是number=300,如果子类中和方法都没有number,会自动找到父类的number输出300,也可以直接调用super.number直接就是父类的
public class Zi extends Fu{
int number=200;
public void method(){
int number=100;
System.out.println(number); //100
System.out.println(this.number); //200
System.out.println(super.number); //300
}
}
-------------------------
public class Fu {
int number=300;
}
总结一句话:就近原则
6.构造器的特点(无参和带参构造)
无参构造:
子类的全部构造器默认先访问父类无参构造,在执行自己的无参构造,原因是子类的无参构造默认书写了super(),调用父类,平常是看不到的,
(可以理解为先有父亲才有儿子,现有父类才有子类,所以先执行父类的无参构造)
package com.itheima.day01.Test01;
/**
* 父类
*/
public class Fu {
public Fu() {
System.out.println("父类无参构造");
}
}
---------------
package com.itheima.day01.Test01;
/**
* 子类
*/
public class Zi extends Fu{
public Zi() {
System.out.println("子类无参构造");
}
}
---------------
package com.itheima.day01.Test01;
/**
* 测试类
*/
public class Demo {
public static void main(String[] args) {
Zi zi = new Zi();
//输出
// 父类无参构造
// 子类无参构造
}
}
带参构造
子类带参构造,是访问的父类的带参构造,初始化继承父类的数据,是通过一个super()去调用父类的带参构造
super() 就相当于一个父类对象 super(参数),就传给了父类的带参构造