面向对象三大特性:封装继承# 动物包含所有的动物,动物又包含会飞的不会飞的,飞禽走兽等# 不同的动物都能吃喝拉撒睡# 大类已经包含吃喝拉撒,小类就不需要包含了多态class People:def __init__(self,name,age):        self.name = name    # 等号两边的 name 变量名可以不一致,比如 self.NAme = name; name 是(self,name,age)中的参数名,NAme 是赋的变量名self.age = agedef eat(self):print("%s is eating..."%self.name)def talk(self):print("%s is talking..."%self.name)def sleep(self):print("%s is sleeping..."%self.name)    # 现在需要写一个子类,子类是男人# Man 需要继承父类# 继承后,里面什么也不写也没关系class Man(People):pass# 实例化m1 = Man()   --->TypeError: __init__() missing 2 required positional arguments: 'name' and 'age'需要传名字才可以,因为是继承了的
1-1class People:def __init__(self,name,age):        self.name = name    # 等号两边的 name 变量名可以不一致,比如 self.NAme = name; name 是(self,name,age)中的参数名,NAme 是赋的变量名self.age = agedef eat(self):print("%s is eating..."%self.name)def talk(self):print("%s is talking..."%self.name)def sleep(self):print("%s is sleeping..."%self.name)    # 现在需要写一个子类,子类是男人# Man 需要继承父类# 继承后,里面什么也不写也没关系class Man(People):pass# 实例化m1 = Man("NiuHanYang",222)  # 调用m1.eat()--->NiuHanYang is eating...Man直接继承了父类的方法
1-2可以写一些自己的方法吗?class People:def __init__(self,name,age):        self.name = name    # 等号两边的 name 变量名可以不一致,比如 self.NAme = name; name 是(self,name,age)中的参数名,NAme 是赋的变量名self.age = agedef eat(self):print("%s is eating..."%self.name)def talk(self):print("%s is talking..."%self.name)def sleep(self):print("%s is sleeping..."%self.name)    # 现在需要写一个子类,子类是男人# Man 需要继承父类# 继承后,里面什么也不写也没关系class Man(People):def piao(self):print("%s is piaoing.....20s......done."%self.name)m1 = Man("NiuHanYang",222)  m1.eat()m1.piao()--->NiuHanYang is eating...NiuHanYang is piaoing.....20s......done.
1-3-1可以重构父类方法吗?比如增加新功能class People:def __init__(self,name,age):        self.name = name    # 等号两边的 name 变量名可以不一致,比如 self.NAme = name; name 是(self,name,age)中的参数名,NAme 是赋的变量名self.age = agedef eat(self):print("%s is eating..."%self.name)def talk(self):print("%s is talking..."%self.name)def sleep(self):print("%s is sleeping..."%self.name)    class Man(People):def piao(self):print("%s is piaoing.....20s......done."%self.name)def sleep(self):print("man is sleeping")m1 = Man("NiuHanYang",222)  m1.eat()m1.piao()m1.sleep()--->NiuHanYang is eating...NiuHanYang is piaoing.....20s......done.man is sleeping父类的没有执行,被覆盖了
1-3-2但是,这里想要的是增加新功能class People:def __init__(self,name,age):        self.name = name    # 等号两边的 name 变量名可以不一致,比如 self.NAme = name; name 是(self,name,age)中的参数名,NAme 是赋的变量名self.age = agedef eat(self):print("%s is eating..."%self.name)def talk(self):print("%s is talking..."%self.name)def sleep(self):print("%s is sleeping..."%self.name)    class Man(People):def piao(self):print("%s is piaoing.....20s......done."%self.name)def sleep(self):        People.sleep(self)      print("man is sleeping")m1 = Man("NiuHanYang",222)  m1.eat()m1.piao()m1.sleep()--->NiuHanYang is eating...NiuHanYang is piaoing.....20s......done.NiuHanYang is sleeping...man is sleeping直接调用父类方法,然后将self自己传进去,父类方法就执行了这就等于重构了父类方法
1-4-1再写一个类class People:def __init__(self,name,age):        self.name = name    # 等号两边的 name 变量名可以不一致,比如 self.NAme = name; name 是(self,name,age)中的参数名,NAme 是赋的变量名self.age = agedef eat(self):print("%s is eating..."%self.name)def talk(self):print("%s is talking..."%self.name)def sleep(self):print("%s is sleeping..."%self.name)    class Man(People):def piao(self):print("%s is piaoing.....20s......done."%self.name)def sleep(self):        People.sleep(self)      print("man is sleeping")class Woman(People):def get_birth(self):print("%s is born a baby...."%self.name)        m1 = Man("NiuHanYang",222)  m1.eat()m1.piao()m1.sleep()w1 = Woman("ChenRonghua",26)w1.get_birth()--->NiuHanYang is eating...NiuHanYang is piaoing.....20s......done.NiuHanYang is sleeping...man is sleepingChenRonghua is born a baby....
1-4-2Man 和 Woman 都 继承了 People既然都属于同一个父类,Woman 可以调用 Man 中的 piao 吗?class People:def __init__(self,name,age):        self.name = name    # 等号两边的 name 变量名可以不一致,比如 self.NAme = name; name 是(self,name,age)中的参数名,NAme 是赋的变量名self.age = agedef eat(self):print("%s is eating..."%self.name)def talk(self):print("%s is talking..."%self.name)def sleep(self):print("%s is sleeping..."%self.name)    class Man(People):def piao(self):print("%s is piaoing.....20s......done."%self.name)def sleep(self):        People.sleep(self)      print("man is sleeping")class Woman(People):def get_birth(self):print("%s is born a baby...."%self.name)        m1 = Man("NiuHanYang",222)  m1.eat()m1.piao()m1.sleep()w1 = Woman("ChenRonghua",26)w1.get_birth()w1.piao()--->AttributeError: 'Woman' object has no attribute 'piao'男女不同的地方,所以才弄出两个子类,所以 Woman 是不可以调用 Man 的就是因为有不同,所以才分别继承了父类

 

©著作权归作者所有:来自51CTO博客作者ATaburiss的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. Java导出类型是什么?
  2. 5.依赖倒转原则
  3. 10.模板方法模式
  4. java类的成员初始化顺序和初始化块顺序
  5. 4-8(继承的概念)
  6. python之类(class)的笔记
  7. python之类的继承
  8. 子类初始化父类的二种方法
  9. Java原子类实现原理分析

随机推荐

  1. Android四大基本组件(Activity,Service,Cont
  2. android menu详解
  3. Android音量控制
  4. Android系统框架和开机流程
  5. 在Android上授权Adobe AIR应用程序
  6. 详解 Android 的 Activity 组件【Z】
  7. 随笔--android上遇到的易忽视的区别
  8. Android系统信息和安全机制
  9. Android 核心分析 之八Android 启动过程
  10. [Android] TextView实现走马灯效果