继承,重载,覆盖联系及区别

相信很多同学和我一样,在刚开始接触Java中的这些重要特点的时候,对于他们的含义以及区别总是搞不清楚,今天就来和我一起看看继承,重载,覆盖,这几个概念的联系还有区别。

继承

继承是面向对象技术中的一个重要特点,在Java中,继承是单一继承的,即一个类只能拥有一个父类。使用extends关键字。那么如何让Java有多继承的特性呢,我们用implements关键字实现,这是继承中一个重要的点——接口。extends关键字是有选择性的实现父类的方法,而接口必须实现接口中定义的全部方法。

在放代码前,我们不得不对Java中的关键字public,private,protected以及无修饰符这几种情况下方法的权限有一个掌握,我将在下一篇博文中进行介绍。

现在,我们上一段代码看看效果。

extends:
我给了两个个包,分别放父类和子类。

package inheritance_Patrent;

import inheritance_Ancestors.Ancestors;

public class Parent extends Ancestors {
	public int publicParent;
	private int privateParent;
	protected int protectedParent;
	int noneParent;

	public Parent() {
		System.out.println("父类的无参构造");
	}

	public Parent(int privateAncestors) {
		super(privateAncestors);
		System.out.println("父类的单参构造");
	}

	public int getPrivateParent() {
		return privateParent;
	}

	public void setPrivateParent(int privateParent) {
		this.privateParent = privateParent;
	}
	
	public void doSomething() {
		System.out.println("这是父类!");
	}

}

当使用extends关键字时,子类可以通过supper关键字调用父类的方法。

package inheritance_Child;

import inheritance_Patrent.Parent;

public class Child extends Parent {

	public Child() {
	}

	public Child(int privateAncestors) {
		super(privateAncestors);
	}
	
	public void doSomething() {
		super.doSomething();
		System.out.println("这是子类");
	}

}

运行结果:
运行结果
implements:

(这两段代码放在同一个包中~~)

//定义接口
package aboutInterface;

public interface IMyFirstInterface {
	public void first();

}

关键字implements用以实现上面定义的接口,在使用接口中,必须完成接口中定义的方法。

//接口的实现类
package aboutInterface;

public class First implements IMyFirstInterface {
	public First() {
	}

	@Override
	public void first() {
		System.out.println("实现第一个接口");
	}

}

运行结果:
在这里插入图片描述
在继承中,我们将用到两个关键字,supper和this,简单的说,supper是对父类的引用,this是对自身的引用。

覆盖

覆盖和继承很相似,都是在垂直方向上引用父类的情况,在覆盖中,子类的方法名称、返回类型以及参数与父类必须一致,且不能缩小父类的访问权限,子类不能覆盖父类的静态方法和私有方法。需要注意的是,父类的方法仅仅是被隐藏了,并没有真正的覆盖掉。

重载

上面说到的继承覆盖都是在垂直方向上的,而现在说的重载是水平方向的,即重载是在同一类中的。具体形式是在一个类中,有多个方法,它们的函数名称相同,在调用时,通过他们的参数来区别。
看一段代码你就懂了~~

有四个构造方法,分别是无参,单参,双参,对象参:

	public Complex() {
	}
	
	public Complex(double real) {
		this.real = real;
		
	}
	
	public Complex(double real,double vir) {
		this.real = real;
		this.vir = vir;
	}
	
	public Complex(Complex complex) {
		this(complex.real,complex.vir);
	}

在调用时,可以通过参数的不同,来区别调用的到底是哪个。

这就是我在刚开始接触Java时对于这三个概念的理解啦,哪里有问题欢迎留言哦~~

发布了2 篇原创文章 · 获赞 0 · 访问量 6
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览