本人CSDN博客专栏:https://blog.csdn.net/yty_7
Github地址:https://github.com/yot777/Python-Primary-Learning
8.2 继承和重写
继承:即一个派生类(derived class)可以直接使用基类(base class)的属性和方法。一个子类可以继承多个父类。子类也可以有自己特有的属性和方法。
重写:如果从父类继承的方法不能满足子类的需求,可以对相同名字的方法进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
类继承的语法:
class ClassName(BaseClass1,[BaseClass2]):
这种写法非常简洁,有点像函数定义了几个参数,要加以区分
图例:动物类、继承自动物类的狗类和猫类,以及实例化对象:
Python继承举例:
class Animal:
def __init__(self,types,name,age):
self.types=types
self.name=name
self.age=age
def intro(self):
print('我是一只%s,名字是%s,年龄是%d岁' %(self.types,self.name,self.age))
def run(self):
print('我飞快的跑')
class Dog(Animal):
def __init__(self,types,name,age,hair):
'''初始化父类的属性,再初始化狗这个子类的特有属性'''
super().__init__(types,name,age)
self.hair=hair
def intro(self):
print('我是一只%s,名字是%s,年龄是%d岁,毛发颜色是%s' %(self.types,self.name,self.age,self.hair))
def look(self):
print('我会看家门')
class Cat(Animal):
def __init__(self,types,name,age,ear):
'''初始化父类的属性,再初始化猫这个子类的特有属性'''
super().__init__(types,name,age)
self.ear=ear
def intro(self):
print('我是一只%s,名字是%s,年龄是%d岁,耳朵长度是%s' %(self.types,self.name,self.age,self.ear))
def catches(self):
print('我会抓老鼠')
dog1=Dog('泰迪','小黑',3,'棕色')
dog1.intro()
dog1.run()
dog1.look()
dog2=Dog('拉布拉多','旺财',5,'金黄色')
dog2.intro()
dog2.run()
dog2.look()
cat1=Cat('波斯猫','小咪',2,'短耳')
cat1.intro()
cat1.run()
cat1.catches()
cat2=Cat('暹罗猫','花花',4,'长耳')
cat2.intro()
cat2.run()
cat2.catches()
运行结果:
我是一只泰迪,名字是小黑,年龄是3岁,毛发颜色是棕色
我飞快的跑
我会看家门
我是一只拉布拉多,名字是旺财,年龄是5岁,毛发颜色是金黄色
我飞快的跑
我会看家门
我是一只波斯猫,名字是小咪,年龄是2岁,耳朵长度是短耳
我飞快的跑
我会抓老鼠
我是一只暹罗猫,名字是花花,年龄是4岁,耳朵长度是长耳
我飞快的跑
我会抓老鼠
//Animal类
package com.yty.test2;
public class Animal {
public String types;
public String name;
public int age;
public Animal(String types,String name,int age){
this.types = types;
this.name = name;
this.age = age;
}
public void intro(){
System.out.println("我是一只"+this.types+",名字是"+this.name+",年龄是"+this.age+"岁");
}
public void run(){
System.out.println("我飞快的跑");
}
}
//Dog类
package com.yty.test2;
public class Dog extends Animal{
public String hair;
public Dog(String types, String name, int age, String hair) {
super(types, name, age);
this.hair = hair;
}
@Override
public void intro(){
System.out.println("我是一只"+this.types+",名字是"+this.name+",年龄是"+this.age+"岁,毛发颜色是"+this.hair);
}
public void look(){
System.out.println("我会看家门");
}
}
//Cat类
package com.yty.test2;
public class Cat extends Animal{
public String ear;
public Cat(String types, String name, int age, String ear) {
super(types, name, age);
this.ear = ear;
}
@Override
public void intro(){
System.out.println("我是一只"+this.types+",名字是"+this.name+",年龄是"+this.age+"岁,耳朵长度是"+this.ear);
}
public void catches(){
System.out.println("我会抓老鼠");
}
}
//AnimalTest类
public class AnimalTest {
public static void main(String[] args) {
Dog dog1 = new Dog("泰迪","小黑",3,"棕色");
dog1.intro();
dog1.run();
dog1.look();
Dog dog2 = new Dog("拉布拉多","旺财",5,"金黄色");
dog2.intro();
dog2.run();
dog2.look();
Cat cat1 = new Cat("波斯猫","小咪",2,"短耳");
cat1.intro();
cat1.run();
cat1.catches();
Cat cat2 = new Cat("暹罗猫","花花",4,"长耳");
cat2.intro();
cat2.run();
cat2.catches();
}
}
运行结果:
我是一只泰迪,名字是小黑,年龄是3岁,毛发颜色是棕色
我飞快的跑
我会看家门
我是一只拉布拉多,名字是旺财,年龄是5岁,毛发颜色是金黄色
我飞快的跑
我会看家门
我是一只波斯猫,名字是小咪,年龄是2岁,耳朵长度是短耳
我飞快的跑
我会抓老鼠
我是一只暹罗猫,名字是花花,年龄是4岁,耳朵长度是长耳
我飞快的跑
我会抓老鼠
参考教程:
廖雪峰的Python教程
https://www.liaoxuefeng.com/wiki/1016959663602400
廖雪峰的Java教程
https://www.liaoxuefeng.com/wiki/1252599548343744
Python3 教程 | 菜鸟教程
https://www.runoob.com/python3/
如果您觉得本篇本章对您有所帮助,欢迎关注、评论、点赞!Github欢迎您的Follow、Star!