Java语言学习总结 高级篇继承的概念及其使用

继承

Java的面向对象有三大特性:封装性,继承性,多态性,继承是多态的前提,没有继承就没有多态。
继承就是将几个类共有的属性,抽象成一个类,在定义新的类时,可以直接继承调用共有的变量或方法。省去重复定义相同代码的麻烦
继承关系的特点是:

  1. 子类可以拥有负类的“内容”
  2. 子类还可以拥有自己专有的内容

父类叫做基类或超类,子类叫做派生类,每一个类都可以看作父类。

继承定义格式

public class 子类名称 extends 父类名称{
//
}

示例代码:

  1. 建立父类

public class ExampleFather {
	public void method(String son) {
		System.out.println("这是父类的方法,被" + son + "继承了");
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}
  1. 建立第一个子类:
public class ExampleSonFirst extends ExampleFather {
	public void methodSonFirst() {
		System.out.println("SonFirst类自己的方法");
	}

	public static void main(String[] args) {
		

	}

}
  1. 建立第二个子类
public class ExampleSonSecond extends ExampleFather{
	public void methodSonSecond() {
		System.out.println("这是SonSecond类自己的方法");
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

}
  1. 建立调试类,并定义子类的对象
public class TestExample {

	public static void main(String[] args) {
		ExampleSonFirst sonfirst = new ExampleSonFirst();
		sonfirst.method("SonFirst");
		sonfirst.methodSonFirst();
		
		ExampleSonSecond sonsecond = new ExampleSonSecond();
		sonsecond.method("SonSecond");
		sonsecond.methodSonSecond();
	}
}

输出结果如下:
输出结果

父类和子类成员重名时访问规则

成员变量重名

在父子类的继承关系中,如果成员变量重名,则创建子类对象时,访问有两种方式:

直接通过子类对象访问成员变量: 等号左边是谁,就优先用谁,没有则往上找
间接通过成员方法访问成员变量: 该方法属于谁,就优先用谁,没有则向上找

代码示例:
建立如下父子类

public class Fu {
	int numFu = 100;
	int num = 2000;
	public void methodFu() {
		System.out.println(num);
	}
}
public class Zi extends Fu{
	int numZi=300;
	int num=1000;
	public void methodZi() {
		System.out.println(num);
	}
}

调试类定义对象,调用变量方法代码如下:

public class TestFuZi {

	public static void main(String[] args) {
		Fu fu = new Fu();
		System.out.println(fu.numFu);
		System.out.println("=================");
		
		Zi zi = new Zi();
		System.out.println(zi.numZi);
		System.out.println(zi.numFu);
		System.out.println("=================");

		System.out.println(zi.num);
		System.out.println("=================");
		
		zi.methodZi();
		zi.methodFu();
		fu.methodFu();

	}

}

输出结果:
输出结果

成员方法重名

在父子类的继承关系当中,创建子类对象,访问成员方法的规则
创建的对象是谁,就优先用谁,如果没有则向上找

注意: 无论是成员方法还是成员变量,如果没有都是向上找父类,绝不会向下找子类的

继承中方法的覆盖重写

重写(override):
在继承关系中,方法的名称一样,参数列表也一样。
覆盖重写的特点: 创建的是子类对象,就优先用子类的方法

** @override ** :写在方法前面,用来检测是不是有效的正确覆盖重写。 这是可选的,但是建议只要是重写方法都写上,检测重写方法是否正确。

子类方法的返回值必须小于等于父类方法的返回值范围
java.lang.Object 类是所有类的公共最高父类

super关键字

在子类中用super关键字直接访问父类的方法。在父类和子类有重名方法时,可以使用。

继承中构造方法的访问特点

继承关系中,父子类构造方法的访问特点:

  1. 子类构造方法当中有一个 默认隐含的"super"调用,所以一定是先调用的父类构造,后执行的子类构造。
  2. 可以通过super关键字来子类构造调用父类重载构造。
    子类必须调用父类构造方法,不写则赠送super(),写了则用写的指定的super调用,super只能写一个。
    ————————————————————————————————
发布了50 篇原创文章 · 获赞 3 · 访问量 5171

猜你喜欢

转载自blog.csdn.net/Ace_bb/article/details/104074597