6. 封装性:getter&setter VS property装饰器
Java
public class Person {
private String name;
private int age;
public Person(String name,int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class Funtion {
public static void main(String[] args) {
Person p = new Person("猪八戒", 18);
p.setName("孙悟空");
p.setAge(28);
System.out.println(p.getName() + p.getAge()); //孙悟空28
}
}
Python
class Person:
def __init__(self,name,age):
self._name = name
self._age = age
# property装饰器,用来将一个get方法,转换为对象的属性
# 添加为property装饰器以后,我们就可以像调用属性一样使用get方法
# 使用property装饰的方法,必须和属性名是一样的
@property
def name(self):
print('get方法执行了~~~')
return self._name
# setter方法的装饰器:@属性名.setter
@name.setter
def name(self , name):
print('setter方法调用了')
self._name = name
@property
def age(self):
return self._age
@age.setter
def age(self , age):
self._age = age
p = Person('猪八戒',18)
p.name = '孙悟空'
p.age = 28
print(p.name,p.age) # 孙悟空 28
7. 继承性
Java
public class Animal {
public void run() {
System.out.println("动物会跑~~~");
}
public void sleep() {
System.out.println("动物睡觉~~~");
}
}
public class Dog extends Animal {
public void bark() {
System.out.println("汪汪汪~~~");
}
@Override
public void run() {
System.out.println("狗跑~~~~");
}
}
public class Hashiqi extends Dog {
public void fan_sha() {
System.out.println("我是一只傻傻的哈士奇");
}
}
public class Funtion {
public static void main(String[] args) {
Dog d = new Dog();
Hashiqi h = new Hashiqi();
}
}
Python
class Animal:
def run(self):
print('动物会跑~~~')
def sleep(self):
print('动物睡觉~~~')
class Dog(Animal):
def bark(self):
print('汪汪汪~~~')
def run(self):
print('狗跑~~~~')
class Hashiqi(Dog):
def fan_sha(self):
print('我是一只傻傻的哈士奇')
d = Dog()
h = Hashiqi()
8. 多态性
因为Python为动态数据类型,所以不需要严格意义上的多态性。