1、继承
1.1继承的概述
在现实生活中,继承一般指的是子女继承父辈的财产。在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系。例如老虎和狮子都属于大型猫科动物,程序中便可以描述为老虎和狮子继承自大型猫科动物,同理,孟加拉虎和东北虎继承自虎类,而刚果狮和亚洲狮继承自狮类。
那么这样写有什么好处呢?
- 提高了代码的重要性,子类继承了父类的所有方法和属性,所以子类不用在重复定义。
- 提高了代码的扩展性,子类可以写自己独特的属性和方法,在父类的基础上进行扩展。
1.2、继承的使用
父类格式
public class 父类名称{
//.....
}
子类格式
public class 子类名称 extends 父类名称{
//.....
}
注意:
- 子类继承了父类的所有属性和方法,只不过只能调用父类的非private属性和方法
- Java中的继承只支持单继承,意思就是一个子类只能继承一个父类,单允许多层继承
下面我们通过Vehicle(车)类、Car(小汽车)类、Sedan(小轿车)类来查看上述继承的特点
/*
* *创建Vehicle作为父类
*/
public class Vehicle {
public int wheelNum; //车轮数量
//注意,这个方法是私有的
private void flameout() {
System. out. println("车辆熄火");
}
public void launch() {
System. out. println("启动车辆");
class Car extends Vehicle {
public double carHeight; //车辆高度
public void run() {
System. out. println("启动快,跑起来嗖嗖的");
}
public static void main(Stringl ] args) {
Car car = new Car();
//可以正常调用父类对象中public方法
car. launch();
//这里代码将会报错,父类的私有方法子类无法调用
car. flameout();
}
}
多层继承
/*
* *定义小轿车Sedan,继承Car
*/
class Sedan extends Car {
public void manned() {
System. out. println("可载人..");
}
public static void main(String[] args) {
Sedan sedan = new Sedan();
//Car继承了Vehicle,Sedan又继承Car,
//也可以使用Vehicle中的方法,这个就是多层继承
sedan. launch();
}
}
2、重写
2.1、重写的概念
在继承关系中,子类会自动继承父类中定义的方法,但有时子类中需要对继承的方法进行一些修改, 即对父类的方法进行重写。
方法的重写又称为方法的覆盖,在继承中还有一种特殊的重写方式, 即子类与父类的成员方法返回值、方法名称、参数类型及个数完全相同,唯不同的是方法实现内容, 这种特殊重写方式被称为重构。
2.2、重写的使用
public class Animal {
//定义动物叫的方法
public void shout() {
System. out. println("动物发出叫声");
}
}
class Dog extends Animal {
//定义狗是怎么叫的
public void shout() {
System. out. println("汪汪汪. .. .");
}
class Sample {
public static void main(String [] args) {
Dog dog = new Dog();
dog. shout();
}
}
通过示例可以看到,我们定义的Dog类继承自Animal 类。在子类Dog中定义了一个shout( )方法对父类方法进行重写。从运行结果可以看出,在调用Dog类对象的shout()方法时,只会调用子类重写的该方法,并不会调用父类的shout( )方法。
注意:
- 子类重写父类的方法时,不能使用比父类中被重写的方法更严格的访问权限。重写方法和被重写的方法必须具有相同的方法名、相同的参数列表和相同的返回值类型,重写方法的访问修饰符必须大于被重写方法的访问修饰符,否则就不能被称为方法的重写。