Java SE 面向对象之继承

继承的概念:

java继承是面向对象的最显著的一个特征。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。

继承的特性:

1.子类继承父类非PRivate修饰的属性与方法

2.子类可以重写父类的方法

3.子类可拥有自己的属性与方法

4.子类不会继承父类的构造器

5.子类不能覆盖继承的实例变量

6.子类通过super关键字调用隐藏的父类方法

package cn.jontim.blogs.example;
/* 
 * Java SE 面向对象之继承
 * 交通工具类
 */
public class Vehicle {
	//价格
	public String price;
	//制造商
	public String manufacturer;
	//速度
	public String velocity;
	
	public void outStatement(){
		System.out.println("我是一个交通工具~");
	}
	
	public void outManufacturer(){
		System.out.println("我的制造厂商是:"+manufacturer);
	}
}
package cn.jontim.blogs.example;
/*
 * Java SE 面向对象之继承
 * 汽车类
 */
public class Car extends Vehicle{

}在Cat类中没有自定义任何属性与方法,全部使用从父类继承来的方法
public class MainEntrance {
	public static void main(String[] args){
		//子类继承父类非private的属性与方法
		System.out.print("Cat:");
		Car car = new Car();
		car.manufacturer = "BMW";
		car.outStatement();
		car.outManufacturer();
	}
}输出结果:Cat:我是一个交通工具~

                 我的制造厂商是:BMW

子类继承父类非private修饰的全部属性与方法
package cn.jontim.blogs.example;
/*
 * Java SE 面向对象之继承
 * 飞机类
 */
public class Aircraft extends Vehicle{

	public void outStatement(){
		System.out.println("我是一架飞机~");
	}
	//子类调用隐藏的父类方法
	public void outSuper(){
		super.outStatement();
	}
}
public class MainEntrance {
	public static void main(String[] args){
		//子类可重写父类的方法
		System.out.print("Aircraft:");
		Aircraft aircraft = new Aircraft();
		aircraft.outStatement();
		aircraft.outSuper();
	}
}输出结果:Aircraft:我是一架飞机~
                 我是一个交通工具~
子类可以重写继承于父类的方法,重写的父类方法会默认隐藏

子类可以用过super关键字调用隐藏的父类方法

package cn.jontim.blogs.example;
/*
 * Java SE 面向对象之继承
 * 火车类
 */
public class Train extends Vehicle{
	//长度
	public int length = 200;
	public void outLength(){
		System.out.println("我的长度是"+length+"米~");
	}
}

public class MainEntrance {
	public static void main(String[] args){
		//子类拥有自己的属性和方法
		System.out.print("Train:");
		Train train = new Train();
		train.outStatement();
		train.outLength();
	}
}输出结果:Train:我是一个交通工具~
                 我的长度是200米~

子类可以拥有自己的属性与方法

package cn.jontim.blogs.example;
/* 
 * Java SE 面向对象之继承
 * 交通工具类
 */
public class Vehicle {
	//价格
	public String price;
	//制造商
	public String manufacturer;
	//速度
	public String velocity;
	
	public void outStatement(){
		System.out.println("我是一个交通工具~");
	}
	
	public void outManufacturer(){
		System.out.println("我的制造厂商是:"+manufacturer);
	}
	//构造方法
	public Vehicle(String price){
		this.price = price;
	}
}
package cn.jontim.blogs.example;
/*
 * Java SE 面向对象之继承
 * 汽车类
 */
public class Car extends Vehicle{
	public Car(){
		//子类构造方法第一行必须调用父类构造方法
		super("1000");
	}
}

子类声明实例对象时默认会调用父类的默认构造方法,如果父类没有默认构造方法时,需要在子类的构造方法中第一行调用父类的构造方法