说到面向对象,就应该说说它的那几个核心的机制:继承,重写,多态,抽象,接口。它们是判断是否运用了面向对象编程的核心。接下来 用几个例子,看看它们的演变过程和它们之间的关系。
继承:简单来说,子类自动拥有父类的所有方法和属性。
举例:狗和猫都继承了动物的叫声。子类继承父类。
class Animal {
private String name;
public void setName(String name){this.name=name;}
public String getName(){return name;}
public void enjoy(){ //动物叫声。。。
System.out.println("叫声......");
}
}
class Cat extends Animal {
private String eyesColor; //猫自己特有的方法。
public String geteyesColor() {return eyesColor;}
public void seteyesColor(String eyesColor)
{this.eyesColor =eyesColor;}
}
class Dog extends Animal {
private String eyesColor; 狗自己特有的方法。
public String geteyesColor() {return eyesColor;}
public void seteyesColor(String eyesColor)
{this.eyesColor =eyesColor;}
}
public class Test {
public static void main(String args[]){
Cat c = new Cat();
Dog d = new Dog();
c.seteyesColor("猫是蓝眼睛"); //实现了自己的特有方法。
d.seteyesColor("狗是黑眼睛");
c.enjoy(); //也继承了父类的方法。
d.enjoy();
System.out.println(c.geteyesColor());
System.out.println(d.geteyesColor());
}
}
结果:
解释:狗和猫既有自己的特有属性和方法,也全部拥有了动物(父类)的方法和属性。这就是继承的特点。
不过上述明显有缺陷的就是狗和猫都有自己独特的叫声,但是在这却都只是拥有了动物这个大众化的声音。该怎样改变呢?就用到了我们的重写。
重写:在子类中可以根据需要对从基类中继承来的方法进行重写。看看下面的改写。
class Animal {
private String name;
public void setName(String name){this.name=name;}
public String getName(){return name;}
public void enjoy(){ //动物叫声。。。
System.out.println("叫声......");
}
}
class Cat extends Animal {
private String eyesColor;
public String geteyesColor() {return eyesColor;}
public void seteyesColor(String eyesColor)
{this.eyesColor =eyesColor;}
public void enjoy() { //重写了父类动物的方法。
System.out.println("猫叫声......");
}
}
class Dog extends Animal {
private String eyesColor;
public String geteyesColor() {return eyesColor;}
public void seteyesColor(String eyesColor)
{this.eyesColor =eyesColor;}
public void enjoy() { //重写了父类动物的方法。
System.out.println("狗叫声......");
}
}
public class Test {
public static void main(String args[]){
Cat c = new Cat();
Dog d = new Dog();
c.seteyesColor("猫是蓝眼睛");
d.seteyesColor("狗是黑眼睛");
c.enjoy();
d.enjoy();
System.out.println(c.geteyesColor());
System.out.println(d.geteyesColor());
}
}
结果:
解释:狗和猫都重写了动物的Enjoy()方法,所以实现了自己独有的叫声。增加了灵活性。
从上面可以看出重写是在继承上进化而来的,所以先继承再进行重写。
PS:由于内容比较多,所以剩下的3个面向对象特点,在下篇博客中讲解。