4.25
所花时间:5小时
代码量:33
博客篇:1
python总结
比较了Python与Java在类的定义、继承、多态等方面的异同,总结Python面向对象程序设计中的原则和注意事项。
定义:
java:
public class Car {
private String color;
private String model;
private int year;
public Car(String color, String model, int year) {
this.color = color;
this.model = model;
this.year = year;
}
public String getColor() {
return color;
}
public String getModel() {
return model;
}
public int getYear() {
return year;
}
}
python:
class Car:
def __init__(self, color, model, year):
self.color = color
self.model = model
self.year = year
从代码行上来看,显然还是python的代码行较少,显得较为简洁,同时,这个也可以被称为Python的优点之一。而且从中也可以明显看出python类中的变量可以直接使用,但是java中使用变量需要先声明再使用。
继承:
python和java在继承方面最大的区别就是python子类可以继承多个父类,但是java子类只能继承一个父类,如果一个子类需要多继承的话一般设计成interface接口的方式来实现。比如创造一个child类,类型fathermother。在Python中,father类和mother类可以都设计成child的父类,但在java中可以设计成father父类和mother接口,继承需要extends关键字实现,接口需要implements关键字实现
python:
class child(father,mother):
java:
class child extends father implements mother
多态:
java中的多态跟Python中的多态是有区别的。java中的多态定义:
多态存在的三个必要条件
1、要有继承;
2、要有重写;
3、父类引用指向子类对象。
java:
public class Test {
public static void main(String[] args) {
show(new Cat()); // 以 Cat 对象调用 show 方法
show(new Dog()); // 以 Dog 对象调用 show 方法
Animal a = new Cat(); // 向上转型
a.eat(); // 调用的是 Cat 的 eat
Cat c = (Cat)a; // 向下转型
c.work(); // 调用的是 Cat 的 work
}
public static void show(Animal a) {
a.eat();
// 类型判断
if (a instanceof Cat) { // 猫做的事情
Cat c = (Cat)a;
c.work();
} else if (a instanceof Dog) { // 狗做的事情
Dog c = (Dog)a;
c.work();
}
}
}
abstract class Animal {
abstract void eat();
}
class Cat extends Animal {
public void eat() {
System.out.println("吃鱼");
}
public void work() {
System.out.println("抓老鼠");
}
}
class Dog extends Animal {
public void eat() {
System.out.println("吃骨头");
}
public void work() {
System.out.println("看家");
}
}
python类具有继承关系,并且子类类型可以向上转型看做父类类型,如果我们从 Person 派生出 Student和Teacher ,并都写了一个 whoAmI() 方法:
python:
class Person(object):
def __init__(self, name, gender):
self.name = name
self.gender = gender
def whoAmI(self):
return 'I am a Person, my name is %s' % self.name
class Student(Person):
def __init__(self, name, gender, score):
super(Student, self).__init__(name, gender)
self.score = score
def whoAmI(self):
return 'I am a Student, my name is %s' % self.name
class Teacher(Person):
def __init__(self, name, gender, course):
super(Teacher, self).__init__(name, gender)
self.course = course
def whoAmI(self):
return 'I am a Teacher, my name is %s' % self.name