继承

当我们进行类的编写时,我们会碰到这样的例子,我们要创建一个宠物类,宠物里有狗,猫,因为他们有着各自的种类,所以我们需要同时设置猫类和狗类加以区分,但是猫和狗都有着同样的很多属性,比如年龄,颜色,昵称等,但是又有着各自不同的属性,比如爱好,猫喜欢抓东西,狗喜欢咬东西,分开写固然可以,但是我们需要多写很多代码,而且要绝对的区别对待。如果有一个共同的宠物类来写入他们共同的特定,他们自己又能有着自己独特的属性和方法,相信在编写代码和思维记忆都会有很大的帮助,所以,作为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方法,但是可以猫类和狗类可以使用他们的父类动物类中的方法,这就是继承。注意这里,构造方法是不能被继承的,所以想要用构造方法给类的属性赋值时需要自己写入。


这里还要提一下继承的利弊关系

好处

  •   提高了代码的复用性
  •   提高了代码的可维护性
  •   是多态的前提

弊端

  •   提高了代码的耦合性

 耦合性:事物与事物之间的依赖关系,互相影响的程度

开发原则:面向对象最终要实现的目的   高内聚(一个对象自己可以完成各种事情)、低耦合(对于其他代码的依赖性非常低)
                  代码的复用性高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值