2--java基础回顾之继承

先看前一个例子,我们看到Wife和Husband类中有很多属性是相同的,例如name,age,sex。为了实现代码的复用我们就要使用继承。
首先我们知道丈夫和妻子他们都是人,那么就应该有人所具备的一些属性,比如人有姓名,年龄,性别...也具有人所具备的一些行为,比如,吃饭,行走,睡觉...那么我们发现丈夫和妻子都有人说具备的一些属性和行为,这些属性和行为都是从人那里继承得来的。
继承的基本概念:通过一个已有的类来创建一个新的类,新类继承了已有类的属性和行为,这种方式称为继承。新的类叫做子类,已有被扩展的类叫做父类。一个类使用关键字extends继承其他类,关键字extends出现在类声明时的类名后,extends后面跟着的是要继承的类的名称,extends实现了继承。在Java中的类只能继承一个类。通过使用继承我们能够非常方便地复用以前的代码,能够大大的提高开发的效率。

public class Person {
	
	private String name;
	private String sex;
	private int age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}

public class Husband extends Person {

	private Wife wife;

	public void setWife(Wife wife) {
		this.wife = wife;
	}

	public Wife getWife() {
		return wife;
	}
	
}

public class Wife extends Person {

	private Husband husband;

	public Husband getHusband() {
		return husband;
	}

	public void setHusband(Husband husband) {
		this.husband = husband;
	}
	
	
}
使用继承要注意:

子类拥有父类分类非private的属性和方法

子类可以拥有自己的属性和方法,

子类可以用自己的方式实现父类的方法


上面我们说子类可以继承父类非private的属性和方法,但是还有一样子类继承不了,那就是构造器,对于构造器来说它只能被调用不能被继承,子类调用父类的构造器可以使用super();

public class Person {
	
	private String name;
	private String sex;
	private int age;
	
	Person(){
		 System.out.println("Person Constrctor...");
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}

<pre name="code" class="java">public class Husband extends Person {

	private Wife wife;
	
	
	Husband(){
		System.out.println("Husband Constructor...");

	}
	public static void main(String[] args) {
        	Husband husband  = new Husband();
    	}
	public void setWife(Wife wife) {
		this.wife = wife;
	}

	public Wife getWife() {
		return wife;
	}
	
}
<pre>Output:
Person Constrctor...
Husband Constructor...

可以看出是从父类开始一级一级完成构建的,子类并没有引用父类的构造器,但是编译器会默认给子类调用父类的构造器,之后才会调用子类的构造器。要这样父类是要有构造器的,若父类没有构造器,那么子类要调用必须使用super();

综上:对于继承,子类默认会调用父类的构造器,但是父类没有默认的构造器,子类必须显示的调用父类的构造器,而且必须在子类构造器的第一行代码


在封装里我们使用private访问修饰符,但是在继承里,如果使用private来修饰子类便不能继承,有时我们需要将该类的某些事物尽可能的隐藏,并且还允许子类来访问,这是我们就必须用protected,它是继承此类,或与该类在同一个包里的都能访问。


继承的缺陷:1:父类变,子类也必须变 2:破坏了封装,3:继承是一种强耦合。





 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值