java继承之类、超类和子类

继承其实在生活中到处都是例子,比如哪个富豪去世了,然后他的子女继承了他的财产啊,或者是有人说你跟你爸或者你妈长得像等等,,都是继承,而在java中的继承,其实是为了减少代码的数量,而重复使用了其上一个类的域(其实就是代码)。所以说继承可以提高代码的重用性,使代码的编码效率得到提高。

说了这么多,相信大家已经知道了继承是什么意思了,于是下面就来演示如何定义和使用继承。


呃。。。首先给个博文的主要内容吧

首先是最基本的-->就是如何定义子类,然后在子类中重载超类的函数,最后就是如何定义子类的构造函数

然后介绍一下多态(很重要哦)-->如何使用

然后介绍一下抽象类-->如何定义和使用

然后就介绍一下受保护的访问(protected关键字)-->如何使用

最后再给出一些注意事项


(1)定义子类...enmmmmm...使用extends关键字,没什么好说的(手动滑稽)。

代码示例:

package Inheritance;

public class InheritanceTest {
	public static void main(String[] args) {
		b x=new b();
		if(x instanceof a) {
			System.out.println("b是a的子类");
		}
	}
}

class a{
	
}

class b extends a{
	
}

运行结果:



(2)重载超类函数。。。在子类中定义和超类一样的名字的函数,并重新书写其中代码:

代码示例:

package Inheritance;

public class InheritanceTest {
	public static void main(String[] args) {
		a x1=new a();
		b x2=new b();
		x1.showInformation();
		x2.showInformation();
	}
}

class a{
	public void showInformation() {
		System.out.println("我是a");
	}
}

class b extends a{
	public void showInformation() {
		System.out.println("我是b");
	}
}

运行结果:


(3)子类构造函数中,首先执行超类构造函数,如果没有显式执行超类带参构造函数,则自动执行超类无参构造函数,若超类无无参构造函数,则出错,然后执行其余语句。

代码示例:

package Inheritance;

public class InheritanceTest {
	public static void main(String[] args) {
		a x1=new a(1);
		b x2=new b(1,2);
		System.out.println(x1.getA());
		System.out.println(x2.getA()+" "+x2.getB());
	}
}

class a{
	private final int a;
	
	public a(int aA) {
		a=aA;
	}
	
	public int getA() {
		return a;
	}
}

class b extends a{
	
	private final int b;
	
	public b(int aA,int aB) {
		super(aA);
		b=aB;
	}
	
	public int getB() {
		return b;
	}
}

运行结果:



(4)由一个公共超类派生出来的所有类的集合被称为继承层次,在继承层次中,从某个特定的类到其祖先的路径被称为该类的继承链


(5)多态是可以使用基类指针引用子类对象,但只能使用基类中的方法?也可以将基类引用强制转换为子类引用,但是一定要保证基类引用原来是引用的子类或者子类的子类。

代码示例:

package Inheritance;

public class InheritanceTest {
	public static void main(String[] args) {
		a x1=new b(1,2);
		System.out.println(x1.getA());
		b x2=(b)x1;
		System.out.println(x2.getA()+" "+x2.getB());
	}
}

class a{
	private final int a;
	
	public a(int aA) {
		a=aA;
	}
	
	public int getA() {
		return a;
	}
}

class b extends a{
	
	private final int b;
	
	public b(int aA,int aB) {
		super(aA);
		b=aB;
	}
	
	public int getB() {
		return b;
	}
}

运行结果:



(6)阻止继承-使用关键字final:

final放在类声明前---防止其他类继承该类。

final放在函数声明前---防止该类子类重定义此方法。

代码示例:

package FinalTest;

public class AFinalTest {

	public static void main(String[] args) {
		b x1=new b();
		x1.showInformation();
	}
}

class a{
	public final void showInformation() {
		System.out.println("可能是A");
	}
}

final class b extends a{
	
}

代码示例:



(7)抽象类--抽象类中可以定义包含具体数据和方法,也能声明一些方法而不定义

扩展一个抽象类有两种选择,一种扩展后定义部分超类抽象类中没有的定义的方法,这样子类依旧是抽象类,

另一种就是全部定义超类抽象类的方法,这样子类就不再是抽象类了。

但是抽象类不可以被实例化

代码示例:

package AbstractTest;

public class AAbstractTest {

	public static void main(String[] args) {
		System.out.println(new Woman().getDescription1());
		System.out.println(new Woman().getDescription2());
	}

}

abstract class Person{
	String name;
	public String getName() {
		return name;
	}
	
	public void setName(String aName) {
		name=aName;
	}
	
	public abstract String getDescription1();
	public abstract String getDescription2();
}

abstract class Man extends Person{
	public String getDescription1() {
		return "A simple man";
	}
}

class Woman extends Person{
	public String getDescription1() {
		return "A simple woman";
	}
	
	public String getDescription2() {
		return "Other description";
	}
}

运行结果:



(8)最后就是4个访问控制符了:

1)仅对本类可见--private

2)对本包和所有子类可见--protected

3)对本包可见--不需要修饰符

4)对所有类可见--public

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Kirito

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值