目录
理解继承
继承的概念和特征
方法重写
概念
方法重写的规则
不使用方法重写的例子
使用方法重写后的例子
重写基类方法
理解继承
继承是面向对象非常重要的部分,当使用继承进行设计代码时,我们可以把通用的方法和变量放到一个类中(父类),其他类(子类)可以通过继承来重用父类的方法和字段,当然子类也可以有自己的方法和变量。
继承的概念和特征
- 子类:子类是一个继承其他类的类
- 父类:被子类继承的类称为父类
- 子类可以继承父类的所有非私有的变量和方法
- Java只支持单继承
- final修饰的类不能被继承
- 所有类都继承基类(Object)
继承的语法如下
class Subclassname extends SuperClassname{
//具体的方法和字段
}
举个简单的例子,每个动物相同的属性和行为,比如名字,吃东西等等
Animal类(父类)
public class Animal {
String name;
String foodName;
void eat() {
System.out.println(name + "正在吃" + foodName);
}
}
Dog类(子类)
public class Dog extends Animal{
String dogType = "柴犬";
void printDogType() {
System.out.println("这是一条" + dogType);
}
}
class DogTest{
public static void main(String[] args) {
Dog dog = new Dog();
dog.name = "旺财";
dog.foodName = "狗粮";
dog.eat();
dog.printDogType();
}
}
方法重写
概念
如果子类具有和父类相同的方法,这个在Java叫做方法重写,换句话说子类重新实现了父类定义的方法。
方法重写的规则
- 该方法必须和父类方法名称相同
- 该方法必须和父类方法的参数保持一致
- 方法之间必须是继承关系
- static和final关键字修饰的方法不能被重写
不使用方法重写的例子
public class Car {
void run() {
System.out.println("一辆汽车在跑");
}
}
class BMW extends Car{
public static void main(String[] args) {
BMW baoma = new BMW();
baoma.run();
}
}
输出如下:
一辆汽车在跑
上面例子的问题在于BMW类继承了Car类的所有方法和字段,因为没有重写run方法,BMW类将会执行父类的run方法,因此我们需要重写run方法来满足BMW类特定的方法实现
使用方法重写后的例子
public class Car {
void run() {
System.out.println("一辆汽车在跑");
}
}
class BMW extends Car{
@Override
void run() {
System.out.println("一辆宝马汽车在跑");
}
public static void main(String[] args) {
BMW baoma = new BMW();
baoma.run();
}
}
输出如下:
一辆宝马汽车在跑
重写基类方法
因为每个类都继承Object,因此可以重写Object类的方法,上面例子的继承树如下:
Object -> Car - > BMW
例子中的toString()和equals()方法是Object类中的方法,可以根据项目的实际需要进行重写。
public class Car extends Object {
void run() {
System.out.println("一辆汽车在跑");
}
}
class BMW extends Car{
@Override
void run() {
System.out.println("一辆宝马汽车在跑");
}
@Override
public String toString(){
return "宝马";
}
@Override
public boolean equals(Object o){
if (o instanceof BMW) {
System.out.println("BMW object");
return true;
}
else{
return false;
}
}
public static void main(String[] args) {
BMW baoma = new BMW();
Car car = new Car();
baoma.run();
System.out.println(baoma.toString());
boolean b = baoma.equals(car);
System.out.println(b);
}
}
此文完。