首页 > 编程语言 >五、Java面向对象:继承

五、Java面向对象:继承

时间:2023-11-01 16:34:25浏览次数:32  
标签:重写 Java 构造方法 继承 子类 面向对象 父类 super

一、概述

继承的概述:将多个类相同的部分使用同一个类括起来,其他类与这个类产生继承关系,这样其他类就包含了这个类的成员

关键字:extends

描述:class A extends B(){ }

          A:子类,派生类

          B:父类,超类,基类  

特点:  java中类与类之间只能单继承,不能多继承;

    类和类之间可以进行多层继承,形成继承体系

注意事项:1、子类只能继承父类所有非私有的成员(成员方法和成员变量);

        2、子类不能继承父类的构造方法,但是可以通过super(后面讲)关键字去访问父类构造方法;

     3、不要为了部分功能而去继承

package com.shujia.day06.ketang;

/*
    java中继承的特点(注意事项):
        1、java中的类与类之间不能进行多继承,只能进行单继承,但是可以进行多层继承,形成继承体系
        2、子类只能继承父类中所有非私有的成员(成员变量和成员方法)
        3、子类无法继承父类中的构造方法,但是要想初始化子类,必须先初始化父类(指的是执行一次父类中任意一个构造方法)
        4、不要为了部分功能去使用继承
        5、什么时候使用继承?满足英语中的 is a的关系

 */

class Father{
    int a = 10;
//    private int b = 20;

    Father(){
        System.out.println("这是父类中的无参构造方法");
    }

    private void show(){
        System.out.println("这是父类中私有的成员方法");
    }
}

class Son extends Father{

    public void fun1(){
        System.out.println(a);
//        System.out.println(b);
//        show();
    }
}

public class ExtendsDemo2 {
    public static void main(String[] args) {
        Son son = new Son();
//        son.fun1();
//        son.show();
    }
}

 

  

super :表示类的直接父类引用  

面试题:super与this的异同

package com.shujia.day06.ketang;
/*
    继承中成员变量的关系(就近原则)
    面试题:java中this和super的异同之处
        1、相同点:使用的语句格式都差不多
            访问成员变量:this.成员变量  super.成员变量
            访问成员方法:this.成员方法(..)  super.成员方法(..)
            访问构造方法:this(..)  super(..)
        2、不同点:this代表的是当前类的对象  super代表的是直接父类的引用
 */

class Demo1 {
    int a = 10;
}

class Demo1Zi extends Demo1 {
    int a = 100;

    public void fun1(){
        int a = 11;
        System.out.println(a);
        //需求:我就想输出父类中的a
//        Demo1 demo1 = new Demo1();
//        System.out.println(demo1.a);
        //获取当前类中的成员变量值
        System.out.println(this.a);
        //java提供了一个与this关键字很像的另一个关键字: super 代表的是直接父类的引用
        System.out.println(super.a);
    }
}
public class ExtendsDemo3 {
    public static void main(String[] args) {
        Demo1Zi demo1Zi = new Demo1Zi();
        demo1Zi.fun1();
    }
}

 

 二、子类初始化

 

要想初始化子类,必须先初始化父类,只要子类构造方法中第一句话调用父类中任意一个构造方法即可(结合super关键字来解释)

1、子类中每一个构造方法的第一句话默认是super() (super()的意思是调用直接父类的构造方法)
2、如果父类中没有无参构造方法? 直接在子类中通过super关键字调用父类其他的构造方法,或者间接地调用
3、父类不能进行多次初始化

package com.shujia.day06.ketang;

/*
    要想初始化子类,必须先初始化父类,只要子类构造方法中第一句话调用父类中任意一个构造方法即可(结合super关键字来解释)

    1、子类中每一个构造方法的第一句话默认是super() (super()的意思是调用直接父类的构造方法)
    2、如果父类中没有无参构造方法? 直接在子类中通过super关键字调用父类其他的构造方法,或者间接地调用
    3、父类不能进行多次初始化

 */
class Fu {
//    Fu(){
//        System.out.println("这是父类中的构造方法");
//    }

    Fu(String s) {
        System.out.println("这是父类中带参数构造方法" + s);
    }
}

class Zi extends Fu {
    Zi(){
        //这里第一句话默认会有一个super()
//        this("hello");
        super("hello");
//        super("hello"); //父类不能进行多次初始化
//        this("hello");
    }

    Zi(String s){
        super("hello");
    }
}
public class ExtendsDemo4 {
    public static void main(String[] args) {
        Zi zi = new Zi();
    }
}

 

 
三、方法的重写
继承中成员方法的关系:
方法的重写:在继承关系中,子类中的方法的声明(返回值类型,方法名,参数列表)与父类中的方法声明都一样,只是实现不一样,这样的现象,叫做方法的重写
判断一个方法能不能重写,可以在方法的上面加上一个注解@Override,能加上不报错,就说明可以重写
面试题:重写与重载的区别?Override与Overload的区别?
方法的重写:在继承关系中,子类中的方法的声明(返回值类型,方法名,参数列表)与父类中的方法声明都一样,只是实现不一样,这样的现象,叫做方法的重写。
方法的重载:在同一个类中,方法的方法名相同,参数列表不同,这个现象叫做方法的重载,与返回值无关。

注意事项:

1.父类中私有方法不能被重写 因为子类根本无法继承私有的

2.子类重写父类方法时,访问权限不能更低 推荐除特殊要求外 子类重写与父类的权限保持一致肯定不会错
3.父类静态方法,子类无法重写
 
四、final关键字
父类中非私有的成员方法可以被子类继承,也可以被重写,但是如果父类中的非私有方法只想被子类使用,但是不想被子类重写,该怎么做呢?
final(最终的,不可变的):可以修饰类,变量,成员方法
特点:修饰类,类不能被继承
   修饰变量,变量变常量
   修饰方法,方法不能被重写
 
 

 

标签:重写,Java,构造方法,继承,子类,面向对象,父类,super
From: https://www.cnblogs.com/SIKE231310/p/17803433.html

相关文章

  • Java基本类型与位移操作
    Java基本类型与位移操作参考基本数据类型浮点数的阶码,尾数与移码IEEE754数据格式介绍和解析方式计算机基础进制转换(二进制、八进制、十进制、十六进制)位运算符以及常见的使用场景位运算理解与常用场景java位运算符常用场景循环移位:循环左移和循环右移验证工具:在线进......
  • Java 线程池详解,图文并茂,还有谁不会?!
    来源:blog.csdn.net/mu_wind/article/details/113806680初识线程池我们知道,线程的创建和销毁都需要映射到操作系统,因此其代价是比较高昂的。出于避免频繁创建、销毁线程以及方便线程管理的需要,线程池应运而生。线程池优势降低资源消耗:线程池通常会维护一些线程(数量为corePool......
  • Exception in thread "main" java.net.BindException: Cannot assign requested addre
    两种情况1.端口号被占用,导致地址无法绑定#windows查看端口pidnetstat-aon|findstr8080(端口号)#linux查看端口占用netstat-anp|grep80802.ip地址与本机地址不匹配,导致地址无法绑定#windows查看ipipconfig#linux查看ipifconfig......
  • Java流程控制_05 Random
     指定区间: 97-100 ----》0-3  ----》r.nextInt(4)+97  1、RandomRandomr=newRandom();inta=r.nextInt(10);2、 ScannerScannersc=newScanner(System.in);System.out.println("");//打印一段提示信息intage=sc.nextInt();//等待键盘输入 ......
  • java预习
    java预习1.......
  • 三、Java里的方法
    一、方法的定义  权限修饰符返回值类型方法名(参数列表){方法体;return返回值;} 注意:1、当类作为方法的参数类型传递的时候,调用时传入的是该类的对象的地址值2、每new一次,都会在堆内存中开辟一个新的空间二、方法的分......
  • 秦疆的Java课程笔记:01-04 前言
    01前言聊聊Java这条路学习一门语言可能并不是大家想的这么容易。比如说大家从小就学英语,为什么有的人英语到后面还是不好呢?那计算机语言跟人类的语言还不一样,它多了更多的理性跟思维。咱们人类去学习还是比较友好的。解决疑惑:零基础可与学Java吗?能,都是从零开始的。有基......
  • java使用ImageIO读取CMYK图片转存为RGB图片在本地和线上表现不同的问题
    项目里有jpg图片是CMYK颜色模式,需要转成RGB颜色模式,我使用的方法简单粗暴,就是利用ImageIO转存一下,在我的本地正常。但是丢到服务器上就有问题了,色差很大。不知道是什么情况。`BufferedImageimg=ImageIO.read(src);ImageIO.write(img,"jpeg",dest);`本......
  • 2023年11月Java面试常见问题
    1.jvm内存模型https://baijiahao.baidu.com/s?id=1709435405507347362&wfr=spider&for=pchttps://baijiahao.baidu.com/s?id=1722629637623477825&wfr=spider&for=pc2.GCROOT都包含什么https://worktile.com/kb/p/37469https://blog.csdn.net/jjclove/article/deta......
  • Java学习之路(三)
    Java学习之路(三)1、数组定义:数组就是存储数据长度固定的容器,存储多个数据的数据类型要一致。1.1、数组定义的格式1、数据类型[]数组名2、数据类型数组名[]int[]arr;intarr[];double[]arr;doublearr[];char[]arr;chararr[];1.2、动态初始......