java继承之类、超类和子类

论坛 期权论坛 脚本     
匿名技术用户   2021-1-5 02:33   27   0

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

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP