杨桃的Python基础教程——第8章:Python类和对象(二)继承和重写

本人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岁,耳朵长度是长耳
我飞快的跑
我会抓老鼠

Java继承举例第一部分:

//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("我飞快的跑");
  }
}

Java继承举例第二部分

//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("我会看家门");
    }
}

Java继承举例第三部分:

//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("我会抓老鼠");
    }
}

Java继承举例第四部分:

//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!

发布了25 篇原创文章 · 获赞 3 · 访问量 2157

猜你喜欢

转载自blog.csdn.net/yty_7/article/details/104201719