文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java继承使用实例分析

2023-06-29 10:59

关注

本篇内容介绍了“Java继承使用实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

继承

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

继承的作用:通过继承可以快速创建新的类,实现代码的重用,提高程序的可维护性,节省大量创建新类的时间,提高开发效率和开发质量。

在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的,一般形式如下:

class 父类{
    ...       //成员变量、成员方法
}
class 子类 extends 父类{
    ...       //类体
}

例如:

class teacher{             //声明一个teacher类为父类    String name;             //定义父类的成员变量name、age       int age;    void show(){           //定义父类成员方法,将成员变量输出        System.out.println(name);               System.out.println(age);     }}class Student extends teacher {     //声明一个Student类为子类并继承父类}public class myfirst {    public static void main(String[] args) {    System.out.println("学生");    Student student=new Student();     //声明一个Student类的实例对象student    student.name="Tom";                //子类调用父类的成员变量name并赋值    student.age=19;                    //子类调用父类的成员变量age并赋值    student.show();                    //子类调用父类的成员方法show    }}

运行结果为:

学生
Tom
19

注意:

继承的优点

重写和隐藏父类方法

子类继承了父类中的所有成员及方法,但在某种情况下,子类中该方法所表示的行为与其父类中该方法所表示的行为不完全相同,例如,在父类语言中定义了说话这个方法,而在子类中说话的方法是不同的:外国人说英文,中国人说中文,这时我们就需要重写或隐藏父类的该方法。

重写父类中的方法

当一个子类中一个实例方法具有与其父类中的一个实例方法相同的签名(指名称、参数个数和类型)和返回值时,称子类中的方法“重写”了父类的方法。例如:

class A{    public void sayHello() {                      //输出英文欢迎        System.out.println("Hello,Welcome to Java!!!");    }    public void sayBye() {        System.out.println("GoodBye,everyone");    }}class B extends A {               public void sayHello() {                      //输出中文欢迎          System.out.println("大家好,欢迎学习Java!!!");    }}public class myfirst {    public static void main(String[] args) {    B b=new B();                                //创建子类B的一个实例对象,使用默认构造方法    b.sayHello();                               //调用子类中重写的方法    b.sayBye();                                 //调用父类中的方法    }}

运行结果为:

大家好,欢迎学习Java!!!
GoodBye,everyone

注意:重写的方法具有与其所重写的方法相同的名称、参数数量、类型和返回值。

隐藏父类中的方法

如果一个子类定义了一个静态类方法,而这个类方法与其父类的一个类方法具有相同的签名(指名称、参数格式和类型)和返回值,则称在子类中的这个类方法“隐藏”了父类中的该类方法。

class A{    public static void sayHello() {             //静态类方法        System.out.println("大家好,这是A的静态类方法");    }    public void sayHello2() {                   //实例方法        System.out.println("大家好,这是A中的实例方法");    }}class B extends A {        public static void sayHello() {             //静态类方法        System.out.println("大家好,这是B的静态类方法");    }    public void sayHello2() {                   //实例方法        System.out.println("大家好,这是B的实例方法");    }}public class myfirst {    public static void main(String[] args) {        B b=new B();                           //创建B类的实例对象b        A a=b;                                 //隐式对象类型转换        A.sayHello();                          //调用A类的静态类方法        a.sayHello();                          //调用a对象的静态类方法        B.sayHello();                          //调用B类的静态方法        a.sayHello2();                         //调用a对象的实例方法        b.sayHello2();                         //调用b对象的的实例方法        A a2=new A();                          //创建A类的实例对象a2        a2.sayHello2();                        //调用a2对象的实现方法    }}

运行结果为:

大家好,这是A的静态类方法
大家好,这是A的静态类方法
大家好,这是B的静态类方法
大家好,这是B的实例方法
大家好,这是B的实例方法
大家好,这是A中的实例方法

可以看出,得到调用的隐藏方法是父类中的方法,而得到调用的重写方法是子类中的方法。

方法重写和隐藏后的修饰符

在子类中被重写的方法,其访问权限允许大于但不允许小于被其重写的方法,例如:父类中一个受保护的实例方法(protected)在子类中可以是公共的(public)的,但不可以是私有的(private)。如果一个方法在父类中是static方法,那么在子类也必须是static方法;如果一个方法在父类中是实例方法,那么在子类中也必须是实例方法。

子类访问父类私有成员

子类继承其父类的所有public和protected成员,但不能继承其父类的private成员。那么如何在子类中访问到父类中的字段呢,我们可以在父类中提供用来访问其私有字段的public或protected方法,子类使用这些方法来访问相应的字段。例如:

class A{                     //父类A    private int value=10;    //声明一个私有变量value并赋值为10    public int getvalue() {  //声明一个公有成员方法getvalue,返回value        return value;    }}class B extends A{           //A的子类B}public class myfirst {        public static void main(String[] args) {      B b=new B();           //创建子类B的一个实例对象      System.out.println("子类通过父类提供的公共接口访问A中的私有字段value:"+b.getvalue());    }}

运行结果为:

子类通过父类提供的公共接口访问A中的私有字段value:10

使用super关键字

使用super调用父类中重写的方法、访问父类中被隐藏的字段
子类重写了父类中的某一个方法,隐藏父类中的字段,假如想在子类中访问到父类中被重写的方法和隐藏父类的字段,可以在子类中通过使用关键字super来调用父类中被重写的方法和访问父类中被隐藏的字段。例如:

package first;class A{    public String name="张飞";         //添加成员变量    public void say() {                //添加成员方法say        System.out.println("我是父类A成员方法say");    }}class B extends A{    public String name="关羽";         //与父类中同名的字段,隐藏父类    public void say(){                 //重写方法say        super.say();                   //使用super关键字调用父类中的方法        System.out.println("我是子类B成员方法say");        System.out.println("父类的name名字:"+super.name); //使用super关键字访问父类中的变量    }}public class myfirst {    public static void main(String[] args) {      B b=new B();                     //创建子类的一个实例对象      b.say();                         //调用子类中重写的方法      System.out.println("子类的name名字:"+b.name);   //调用子类中的name    }}

运行结果为:

我是父类A成员方法say
我是子类B成员方法say
父类的name名字:张飞
子类的name名字:关羽

使用super调用父类的无参数构造方法/有参数构造方法

子类不继承其父类的构造方法。

例如:

class SuperClass {              //创建父类SuperClass      private int n;            //声明一个私有变量n      SuperClass(){             //父类无参数构造方法        System.out.println("这是父类SuperClass无参数构造方法");      }      SuperClass(int n) {       //父类有参数构造方法        System.out.println("这是父类SuperClass有参数构造方法");        this.n = n;      }    }    class SubClass extends SuperClass{     // SubClass类继承SuperClass类      private int n;                       //声明一个私有变量n      SubClass(){                          // 自动调用父类的无参数构造器        System.out.println("这是子类无参数构造方法");      }              public SubClass(int n){              //子类有参数构造方法        super(300);                        //调用父类中带有参数的构造器        System.out.println("这是子类有参数构造方法"+n);        this.n = n;      }    }public class myfirst {    public static void main(String[] args) {            SubClass sc1 = new SubClass();      //创建子类SubClass实例对象,调用其无参数构造方法            SubClass sc2 = new SubClass(100);   //创建子类SubClass实例对象,调用其有参数构造方法    }}

运行结果为:

这是父类SuperClass无参数构造方法
这是子类无参数构造方法
这是父类SuperClass有参数构造方法
这是子类有参数构造方法100

注意

附:继承的使用和认识

继承是怎么实现的?

使用extends 和 implements 关键字

extends 继承的都是对象

implements 继承实现并实现的是接口

在继承的场景下,同一样东西,怎么区分是你老爹的还是你自己的?

使用super 与 this 关键字

super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。

this关键字:指向自己的引用。

父类的某些方法不想被子类继承,怎么处理?

对方法或属性进行 private 关键字或final关键字修饰

private 关键字修饰,子类无法使用和继承

final关键字修饰,无法继承,但是否可以被使用需要看权限属性

“Java继承使用实例分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯