当我们进行类的编写时,我们会碰到这样的例子,我们要创建一个宠物类,宠物里有狗,猫,因为他们有着各自的种类,所以我们需要同时设置猫类和狗类加以区分,但是猫和狗都有着同样的很多属性,比如年龄,颜色,昵称等,但是又有着各自不同的属性,比如爱好,猫喜欢抓东西,狗喜欢咬东西,分开写固然可以,但是我们需要多写很多代码,而且要绝对的区别对待。如果有一个共同的宠物类来写入他们共同的特定,他们自己又能有着自己独特的属性和方法,相信在编写代码和思维记忆都会有很大的帮助,所以,作为JAVA三大特性之一的——继承出现了。
概述:
让类与类产生关系,子父类的关系关键字:extends,扩展、增加、继承父类和子类: 父类:被继承的类,超类、基类 子类:用于继承的类,派生类先来看一个没有继承的普通的程序:
public class 没有继承 { public static void main(String[] args) { Cat c = new Cat("白色",3); c.show(); c.sleep(); Dog d = new Dog("灰色",4); d.show(); d.sleep(); } } //猫类 class Cat { private String color; private int age; public Cat() {}; public Cat(String color, int age) { super(); this.color = color; this.age = age; } public void setColor(String color) { this.color = color; } public String getColor() { return color; } public void setAge(int age) { this.age = age; } public int getAge() { return age; } public void sleep() { System.out.println("我要睡觉啦"); } public void show() { System.out.println("我是颜色是"+color+",今年"+age+"岁了"); } } //狗类 class Dog { private String color; private int age; public Dog() {}; public Dog(String color, int age) { super(); this.color = color; this.age = age; } public void setColor(String color) { this.color = color; } public String getColor() { return color; } public void setAge(int age) { this.age = age; } public int getAge() { return age; } public void sleep() { System.out.println("我要睡觉啦"); } public void show() { System.out.println("我是颜色是"+color+",今年"+age+"岁了"); } }输出结果为:
我是颜色是白色,今年3岁了 我要睡觉啦 我是颜色是灰色,今年4岁了 我要睡觉啦我们再来写一个有继承的例子:
public class 有继承 { public static void main(String[] args) { Cat c = new Cat(); c.setColor("白色"); c.setAge(3); c.show(); c.sleep(); Dog d = new Dog(); d.setColor("灰色"); d.setAge(4); d.show(); d.sleep(); } } class Animal { private String color; private int age; public Animal() {}; public Animal(String color, int age) { super(); this.color = color; this.age = age; } public void setColor(String color) { this.color = color; } public String getColor() { return color; } public void setAge(int age) { this.age = age; } public int getAge() { return age; } public void sleep() { System.out.println("睡觉"); } public void show() { System.out.println("我是颜色是"+color+",今年"+age+"岁了"); } } class Cat1 extends Animal { private String color; private int age; public Cat1() {}; public Cat1(String color, int age) { super(); this.color = color; this.age = age; } } class Dog1 extends Animal { private String color; private int age; public Dog1() {}; public Dog1(String color, int age) { super(); this.color = color; this.age = age; } }输出结果:
我是颜色是白色,今年3岁了 我要睡觉啦 我是颜色是灰色,今年4岁了 我要睡觉啦这里我们可以看出来,下面的猫类和狗类都没有写入自己的setter方法和getter方法,以及show方法和sleep方法,但是可以猫类和狗类可以使用他们的父类动物类中的方法,这就是继承。注意这里,构造方法是不能被继承的,所以想要用构造方法给类的属性赋值时需要自己写入。
这里还要提一下继承的利弊关系:
好处:
提高了代码的复用性 提高了代码的可维护性 是多态的前提弊端:
提高了代码的耦合性耦合性:事物与事物之间的依赖关系,互相影响的程度
开发原则:面向对象最终要实现的目的 高内聚(一个对象自己可以完成各种事情)、低耦合(对于其他代码的依赖性非常低) 代码的复用性高