一、什么是里氏代换原则
里氏代换原则(Liskov Substitution Principle):
一个软件实体如果使用的是一个父类的话,那
么一定适用于其子类,而且它察觉不出父类和子
类对象的区别。也就是说,在软件里面,把父类
替换成它的子类,程序的行为没有变化。
二、反过来的代换不成立
里氏代换原则(Liskov Substitution Principle):
一个软件实体如果使用的是一个子类的话,那 么它不能适用于其父类。
三、企鹅是鸟类吗??
四、正方形是一种长方形吗??
五、好骗的Java编译器
六、原来还有一个四边形的概念?
//示例1:
public class Person {
public void display(){
System.out.println("this is a Person");
}
}
public class Man extends Person{
@Override
public void display() {
System.out.println("this is man");
}
}
public class MainClass {
public static void main(String[] args) {
Person person = new Person();
display(person);
Person man = new Man();
display(man);
}
public static void display(Person person){
person.display();
}
}
//this is a Person
//this is man
//示例2:
public interface Bird {
public void fly();
}
public class LaoYing implements Bird{
@Override
public void fly() {
System.out.println("老鹰在飞");
}
}
public class Maque implements Bird{
@Override
public void fly() {
System.out.println("麻雀在飞");
}
}
public class Qie implements Bird{
@Override
public void fly() {
System.out.println("企鹅不能飞");
}
}
public class MainClass {
public static void main(String[] args) {
fly(new LaoYing());
fly(new Qie()); //企鹅不能飞,但是它属于鸟类
}
public static void fly(Bird bird ){
bird.fly();
}
}
//
//老鹰在飞
//企鹅不能飞
//示例3:
public class Rectangle {
private long width;
private long height;
public void setWidth(long width) {
this.width = width;
}
public long getWidth() {
return width;
}
public void setHeight(long height) {
this.height = height;
}
public long getHeight() {
return height;
}
}
public class Square extends Rectangle {
private long side;
public void setSide(long side) {
this.side = side;
}
public long getSide() {
return side;
}
//父类中的方法
@Override
public void setWidth(long width) {
// super.setWidth(width);
this.setSide(width);
}
@Override
public long getWidth() {
// return super.getWidth();
return this.getSide();
}
@Override
public void setHeight(long height) {
// super.setHeight(height);
this.setSide(height);
}
@Override
public long getHeight() {
// return super.getHeight();
return this.getSide();
}
}
public class MainClass {
public static void main(String[] args) {
Rectangle rectangle = new Rectangle();
rectangle.setHeight(10);
rectangle.setWidth(20);
test(rectangle);
Square square = new Square();
square.setHeight(10);
test(square);
}
public static void test(Rectangle rectangle){
System.out.println(rectangle.getHeight());
System.out.println(rectangle.getWidth());
}
}
//10
//20
//10
//10