当我们进行类的编写时,我们会碰到这样的例子,我们要创建一个宠物类,宠物里有狗,猫,因为他们有着各自的种类,所以我们需要同时设置猫类和狗类加以区分,但是猫和狗都有着同样的很多属性,比如年龄,颜色,昵称等,但是又有着各自不同的属性,比如爱好,猫喜欢抓东西,狗喜欢咬东西,分开写固然可以,但是我们需要多写很多代码,而且要绝对的区别对待。如果有一个共同的宠物类来写入他们共同的特定,他们自己又能有着自己独特的属性和方法,相信在编写代码和思维记忆都会有很大的帮助,所以,作为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方法,但是可以猫类和狗类可以使用他们的父类动物类中的方法,这就是继承。注意这里,构造方法是不能被继承的,所以想要用构造方法给类的属性赋值时需要自己写入。
这里还要提一下继承的利弊关系:
好处:
- 提高了代码的复用性
- 提高了代码的可维护性
- 是多态的前提
弊端:
- 提高了代码的耦合性
耦合性:事物与事物之间的依赖关系,互相影响的程度
开发原则:面向对象最终要实现的目的 高内聚(一个对象自己可以完成各种事情)、低耦合(对于其他代码的依赖性非常低)
代码的复用性高