Java超详细讲解类的继承

网友投稿 218 2022-10-09

Java超详细讲解类的继承

目录写在前面1.子类的创建1.1子类的创建方法1.2调用父类中特定的构造方法2.在子类中访问父类成员3.覆盖3.1覆盖父类中的方法3.2用父类的对象访问子类的成员4.不可被继承的成员和最终类实例java代码

写在前面

类的继承可以在已有类的基础上派生出来新的类,不需要编写重复的代码,提高了代码的复用性,是面向对象程序设计的一个重要的特点,被继承的类叫做父类,由继承产生的新的类叫做子类,一个父类可以通过继承产生多个子类,但是与C++不同的是Java语言不支持多重继承,即不能由多个类派生出一个新的类,避免了由多重继承产生的歧义性,更加的安全。

子类继承父类的成员变量和成员方法,还可以修改父类的成员变量或者重写父类成员方法,还可以添加新的成员变量和方法,大大提高了代码的复用性。

所有的类都是直接或者间接的继承java.lang.Object类来的。

--------------分割线--------------

1.子类的创建

1.1子类的创建方法

java语言中类的继承由关键字extends实现。

如果继承中没有使用extends关键字,则说明该类默认继承ava.lang.Object。

子类的每个对象也是父类的对象,所以在任何使用父类实例地方,都允许使用子类实例。

实例1:创建个人类Person,在以个人类为父类创建子类学生类Student类。(代码放在文末)

java在调用子类的构造函数之前,会先调用父类的构造方法。构造方法是不能被继承的。

1.2调用父类中特定的构造方法

在Java继承中,程序执行时,子类会先调用父类的无参构造方法,进行初始化操作,http://但是如果父类中有多个构造函数,那么就需要在子类的构造方法中使用super()来调用父类中特定的构造方法。

实例2:super()调用父类中特定的构造方法(代码放在文末)

如果省略super()则会默认调用父类的无参构造方法。调用父类构造方法的super()语句必须放在子类构造方法的第一行。super()可以重载,会根据参数的数量和类型选择调用父类的构造方法。如果父类中只定义了有参数的构造方法,而子类中没有使用super()来调用父类特定的构造方法,则编译会出现错误。

--------------分割线--------------

2.在子类中访问父类成员

在子类中使用super()方法,可以访问父类中的特定的构造方法,还可以访问父类中的成员变量和成员方法。但是不能访问子类中添加的成员。

super.变量名

super.方法名

若父类成员申明为private,则子类中无法访问。

3.覆盖

3.1覆盖父类中的方法

覆盖与重载相似,是java多态特点的体现。覆盖是指在子类中,定义名称,参数个数与类型与父类中完全相同的方法,用于实现重写父类中同名方法。如果子类中的方法名和父类中的方法名完全相同,则不能继承,此时子类的方法覆盖父类中的方法。子类中不能覆盖父类中声明为final和static的方法。在子类覆盖父类的方法时,可以扩大父类中方法的权限,但是不能缩小父类中方法的访问权限。

3.2用父类的对象访问子类的成员

当子类覆盖父类的成员方法时,父类的对象可以访问子类的成员。只需要声明父类的变量指向子类的对象,此时可以访问子类覆盖父类的成员方法,但是不可以访问子类特有的成员方法。

4.不可被继承的成员和最终类

如果父类中的成员不希望被覆盖,则可以使用final关键字来修饰。如果用final来修饰变量,则称该变量为最终变量,即常量,程序中其他部分,可以访问,但是不可以修改。如果用final修饰成员方法,则该方法不可以被子类覆盖,该方法称为最终方法。增加了代码的安全性。如果一个类被final修饰,则该类称为最终类,不可以被继承。

定义在类中的final成员变量和定义在方法中的final局部变量,一旦给定就不能被修改,都属于是只读量,只能一次赋值。

--------------分割线--------------

如果一个变量同时被final和static修饰,则他的实质是一个常量,即static final。且这样的常量只能在定义的时候被赋值。如果一个变量只用final修饰而不用static,则只能被赋值一次,不能缺省。

实例java代码

实例1:

//实例1:类的继承,创建个人类Person,在以个人类为父类创建子类学生类Student类。

//filename:A_1.java

import java.io.*;

class Person{

private String name;

private int age;

AKLwAKAn public Person(){

System.out.println("调用Person类的构造方法");

}

public void setNameAge(String name,int age){

this.name=name;

this.age=age;

}

public void show(){

System.out.println("姓名:"+name+"年龄"+age);

}

}

class Student extends Person{

private String department;

public Student(){

System.out.println("调用Student类的构造方法");

}

public void setDepartment(String department){

this.department=department;

System.out.println("我是"+department+"的学生");

}

}

public class A_1{

public static void main(String[] args){

Student stu=new Student();

stu.setNameAge("张三",18);

stu.show();

stu.setDepartment("计算机专业");

}

}

/**

调用Person类的构造方法

调用Student类的构造方法

姓名:张三年龄18

我是计算机专业的学生

*/

实例2:

//实例2:super()调用父类中特定的构造方法

//filename:A_1.java

import java.io.*;

class Person{

private String name;

private int age;

public Person(){

System.out.println("调用Person类的无参构造方法");

}

public Person(String name,int age){

System.out.println("调用Person类的有参构造方法");

this.name=name;

this.age=age;

}

public void show(){

System.out.println("姓名:"+name+"年龄"+age);

}

}

class Student extends Person{

private String department;

public Student(){

System.out.println("调用Student类的无参构造方法");

}

publihttp://c Student(String name,int age,String department){

super(name,age);

this.department=department;

System.out.println("我是"+department+"的学生");

System.out.println("调用Student类的有参构造方法");

}

}

public class A_1{

public static void main(String[] args){

Student stu1=new Student();

Student stu2=new Student("张三",18,"计算机专业");

stu1.show();

stu2.show();

}

}

/**

调用Person类的无参构造方法

调用Student类的无参构造方法

调用Person类的有参构造方法

我是计算机专业的学生

调用Student类的有参构造方法

姓名:null年龄0

姓名:张三年龄18

*/

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpotMax上新:伸缩统计、实例预热、智能存储,提供多重降本保障
下一篇:云计算技术博客-豆丁博客
相关文章

 发表评论

暂时没有评论,来抢沙发吧~