继承其实在生活中到处都是例子,比如哪个富豪去世了,然后他的子女继承了他的财产啊,或者是有人说你跟你爸或者你妈长得像等等,,都是继承,而在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