继承
-
idea中使用Ctrl + H 查看继承树
-
继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模。
-
extands的意思是“扩展”。子类是父类的扩展。
-
JAVA中类只有单继承,没有多继承! (往上数,只有一个爹)
-
继承是类和类之间的一种关系。除此之外,类和类之间的关系还有依赖、组合、聚合等。
-
继承关系的俩个类,一个为子类(派生类),一个为父类(基类)。
-
子类继承父类,使用关键字extends来表示。
-
子类和父类之间,从意义上讲应该具有"is a"的关系.
-
子类继承了父类,救护拥有父类的全部
非private方法
-
在Java中,所有的类,都默认直接或者间接继承 Object 类
super
- super注意点:
- super调用父类的构造方法,必须在构造方法的第一个
- super 必须只能出现在子类的方法或者构造方法中!
- super和 this不能同时调用构造方法!
- super与 this的不同:
1、代表的对象不同:
this:本身调用者这个对象
super:代表父类对象的应用
2、前提
this:没哟继承也可以使用
super:只能在继承条件才可以使用
3、构造方法
this();调用本类的构造
super():调用父类的构造!
- super实例
父类
public class JiChengFather {
// private JiChengFather jiChengFather= new JiChengFather();
public String abc = "我是父类中的String";
// public JiChengFather() {
// System.out.println("JiChengFather 无参构造器执行了");
// }
public JiChengFather(String aaa){
System.out.println("JiChengFather 有参构造器执行了");
}
public void pullName(){
System.out.println("JiChengFather");
}
public static void sayStatic(){
System.out.println("好家伙,这是静态方法");
}
public void say(){
System.out.println("好家伙,这是非静态,public");
}
/**
* private 无法被继承
*/
private void sayPrivate(){
System.out.println("好家伙,这是非静态,private");
}
void sayDefault(){
System.out.println("好家伙,这是非静态,default(default省略不写)");
}
protected void sayProtected(){
System.out.println("好家伙,这是非静态,protected ");
}
}
子类
public class JiChengSon extends JiChengFather{
private String abc = "我是子类中的String";
public JiChengSon() {
/**
* 1、隐葳代码:调用了父类的无参构选
* 2、调用父类的构造器,必须要在子类构造器的第一行,之前不可添加别的代码
* Call to 'super()' must be first statement in constructor body
* 3、如果父类只展示出了有参构造,则要在super() 的括号中添加相应的参数
*/
super("dfsf");// 父类只展示出了有参构造,则要在super() 的括号中添加相应的参数
System.out.println("JiChengSon 无参构造器 执行了");
}
public void pullName(){
System.out.println("JiChengSon");
}
public void superAndThis(String abc){
System.out.println(abc); //方法传入的String
System.out.println(this.abc); //当前类中私有的String
System.out.println(super.abc); //父类的String
}
public void pullHisName(String name){
pullName(); // 调用当前类的方法
this.pullName(); // 调用当前类的方法
super.pullName(); // 调用父类的方法
}
}
main方法
public class C5JiChengApplication {
public static void main(String[] args) {
/**
* 声明(在栈中) 创建对象(在堆中)
* 对象.方法名 调用非静态方法
* 类名.方法名 调用静态方法
*
* 子类继承了父类,就会拥有父类的全部方法!
*/
JiChengSon jiChengSon = new JiChengSon();
// jiChengSon.say(); //调用非静态方法
// jiChengSon.sayDefault();
// jiChengSon.sayProtected();
// jiChengSon.superAndThis("现输入的字符串");
// jiChengSon.pullHisName("现输入的名字");
JiChengSon.sayStatic(); //调用静态方法
JiChengFather.sayStatic();
}
}