我的编程空间,编程开发者的网络收藏夹
学习永远不晚

JAVA面向对象之继承 super入门解析

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

JAVA面向对象之继承 super入门解析

1 继承

1.1概念

继承是面向对象最显著的一个特征 继承是从已有的类中派生出新的类,新类能吸收已有类的数据属性和行为,并扩展新的能力. Java继承是会用已存在的类的定义作为基础建立新类的技术 新类的定义可以增加新的数据或者新的功能,也可以使用父类的功能,但不能选择性的继承父类(超类/基类) 这种继承使得复用以前的代码非常容易,能够大大的缩短开发的周期,降低开发费用.

1.2 特点

  • 使用extends关键字来表示继承关系
  • 相当于子类把父类的功能复制了一份
  • Java只支持单继承
  • 继承可以传递(爷爷/儿子/孙子这样的关系)
  • 父类的私有成员由于私有限制访问,所以子类不能使用父类的私有资源
  • 继承多用于功能的修改,子类可以在拥有父类功能的同时,进行功能拓展
  • 像是is a的关系

1.3 练习:继承入门案例

创建包: cn.tedu.oop2

创建类: TestExtends.java


package cn.tedu.oop2;

public class TestExtends {
    public static void main(String[] args) {
        //5.分别创建3个类的对象
        Animal a = new Animal();
        Cat c = new Cat();
        MiaoMiao m = new MiaoMiao();
        //6.利用对象调用方法进行测试
        
        a.eat();//爷爷类使用自己的方法
        c.eat();//爸爸类可以使用从爷爷类中继承过来的方法
        m.eat();//孙子类也可以使用从爷爷类中继承过来的方法
    }
}


//1.创建小动物类--爷爷类
class Animal{
    //4.添加爷爷类的普通方法
    public void eat(){
        System.out.println("小动物Animal吃啥都行~");
    }
}
//2.创建小猫类--爸爸类

class Cat extends Animal{
    //7.定义爸爸类中的属性
    int a = 10;//普通属性
    private int b = 100;//私有属性
}
//3.创建MiaoMiao类--孙子类
class MiaoMiao extends Cat{
    
    //8.定义孙子类的方法
    public void studyJava(){
        System.out.println("正在学Java");
        System.out.println(a);
        
        //System.out.println(b);//不可以,私有资源被限制访问
    }
}

2 super

我们可以把super看作是父类的对象:Father super = new Father();

1.当父类的成员变量与子类的变量同名时,使用super指定父类的成员变量

2.使用super在子类构造方法的第一行调用父类构造方法的功能

super();–调用的是父类的无参构造

super(参数);–调用的是父类对应参数的构造方法

注意:在构造方法里,出现的调用位置必须是第一行

3 继承的用法

3.1 练习:super之继承中成员变量使用

创建包: cn.tedu.oopextends

创建类: TestExtends1.java


package cn.tedu.oop2;

public class ExtendsDemo1 {
    public static void main(String[] args) {
        //7.创建子类的匿名对象,调用study()
        new Son().study();
    }
}
//1.创建父类
class Father{
    //3.创建父类的成员变量
    int sum = 1;
    int count = 2;

}
//2.创建子类
class Son extends Father{
    //4.创建子类的成员变量
    int sum = 10;
    //5.创建子类的普通方法
    public void study(){
        System.out.println("goog good study , day day up");
        //6.创建子类的局部变量
        int sum = 100;
        //8.打印子类的局部变量sum
        System.out.println(sum);//100
        //9.打印子类的成员变量sum
        System.out.println(this.sum);//10
        //10.打印父类的成员变量sum
        
        System.out.println(super.sum);//1
        System.out.println(count);
    }
}

3.2 练习:super之继承中构造方法的使用

创建包: cn.tedu.oop2

创建类: ExtendsDemo2.java


package cn.tedu.oop2;

public class ExtendsDemo2 {
    public static void main(String[] args) {
        //6.1通过父类的无参构造创建父类对象
        //Father2 f = new Father2();
        //6.2通过父类的含参构造创建父类对象
        //Father2 f2 = new Father2("哈哈哈");
        //7.创建子类对象
        Son2 s = new Son2();
    }
}
//1.创建父类
class Father2{
    //3.创建父类的无参构造
//    public Father2(){
//        System.out.println("我是父类的无参构造");
//    }
    //4.创建父类的含参构造
    public Father2(String s){
        System.out.println("我是父类的含参构造"+s);
    }
}
//2.创建子类
class Son2 extends Father2{
    //5.创建子类的无参构造
    public Son2(){
        //super();//调用父类的无参构造
        super("你好~");
        System.out.println("我是子类的无参构造");
    }
}

4 方法重写Override

继承以后,子类就拥有了父类的功能

在子类中,可以添加子类特有的功能,也可以修改父类的原有功能

子类中方法的签名与父类完全一样时,会发生覆盖/复写的现象

注意: 父类的私有方法不能被重写

重写的要求:两同两小一大

两同:方法名 参数列表 要完全一致

两小:

子类返回值类型小于等于父类的返回值类型(注意此处说的是继承关系,不是值大小)

子类抛出异常小于等于父类方法抛出异常

一大:子类方法的修饰符权限要大于等于父类被重写方法的修饰符权限

4.1 练习:继承中成员方法的使用

创建包: cn.tedu.oop2

创建类: ExtendsDemo3.java


package cn.tedu.oop2;

public class ExtendsDemo3 {
    public static void main(String[] args) {
        //4.创建对象进行测试
        Father f = new Father();
        Son s = new Son();
        f.eat();
        s.eat();
        f.play();
        s.play();
    }
}
//1.创建父类
class Father{
    //3.定义父类中的普通方法
    public void eat(){
        System.out.println("爸爸爱吃肉");
    }
    public void play(){
        System.out.println("爸爸爱放风筝");
    }
}
//2.创建子类
class Son extends Father{
    //5.如果子类对父类的方法不满意,可以重写父类的方法
    
    @Override //注解,用来加在方法上,表示这是一个重写的方法
    public void eat(){
        System.out.println("儿子爱吃蔬菜");
    }
    @Override
    public void play(){
        System.out.println("儿子爱玩游戏");
    }
}

5 拓展

5.1 继承的好处与坏处

继承的好处

提高了代码的复用性(多个类相同的成员可以放在同一个类中)

提高了代码的维护性(如果方法的代码需要修改,只修改一处即可)

继承的坏处

继承让类与类建立了关系,类的耦合性增强

当父类发生变化时,子类实现也不得不跟着变化,削弱了子类的独立性

5.2 this与super的区别

this: 代表本类对象的引用

我们可以把this看作是Cat this = new Cat();

super:代表父类存储空间的标识,可以理解成父类对象的引用

可以把super看作是Father super = new Father();

this关键字指向调用该方法的对象

一般我们是在当前类中使用this关键字

所以我们常说this代表本类对象的引用

注意:super的使用前提是继承,没有父子类关系,就没有super

注意:this调用构造方法或者super调用构造方法,都必须出现在构造方法的第一行

注意:如果父类没有无参构造,需要手动在子类构造方法的第一行调用其他的含参构造

拓展:如果子类重写了父类的方法以后,可以使用super.方法名(参数列表)来调用

5.3 重载Overload与重写Override的区别

重载:在一个类中的现象:同一个类中,存在方法名相同,参数列表不同的方法

重写:是指建立了继承关系以后,子类对父类的方法不满意,可以重写,遵循两同两小一大原则

重载的意义:是为了外界调用方法时方便,不管传入什么样的参数,都可以匹配到对应的同名方法

重写的意义:在不修改源码的情况下,进行功能的修改与拓展(OCP原则:面向修改关闭,面向拓展开放)

到此这篇关于JAVA面向对象之继承 super入门解析的文章就介绍到这了,更多相关JAVA 继承 super内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

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

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

JAVA面向对象之继承 super入门解析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

JAVA面向对象中如何继承super

小编今天带大家了解JAVA面向对象中如何继承super,文中知识点介绍的非常详细。觉得有帮助的朋友可以跟着小编一起浏览文章的内容,希望能够帮助更多想解决这个问题的朋友找到问题的答案,下面跟着小编一起深入学习“JAVA面向对象中如何继承sup
2023-06-28

Java面向对象之继承的概念详解

这篇文章主要介绍了Java面向对象之继承的概念详解,Java是一种面向对象的编程语言,继承是实现面向对象编程的基础之一。通过继承,我们可以使代码更具可读性、可重用性和可维护性,从而提高程序的效率和可靠性,需要的朋友可以参考下
2023-05-18

详解Java面向对象中的继承

这篇文章主要介绍了详解Java面向对象中的继承,继承提高代码的复用性:通过继承,子类可以直接使用父类的属性和方法,不需要重复定义,需要的朋友可以参考下
2023-05-19

python 面向对象之类的继承

python中什么是继承:新类不必从头编写新类从现有的类继承,就自动拥有了现有类的所有功能新类只需要编写现有类缺少的新功能继承的好处:复用已有代码自动拥有了现有类的所有功能只需要编写缺少的新功能继承的特点:子类和父类是is关系python继
2023-01-30

python 面向对象之继承顺序

先来看一个经典类classA:def__init__(self):print(A)classB(A):def__init__(self):print(B)classC(A):def__init__(self):print(C)classD(
2023-01-30

python 面向对象之继承实例讲解

面向对象编程语言具有封装、继承、多态三个基本特征,本文就继承举例详谈比如说学校主要有3大角色:学校,讲师,学员学校可以注册学员,统计有多少学员老师负责讲课学生听课,提问,学习,交学费先定义4个类:classSchool(object):#学
2023-01-30

深入浅析java中面向对象的继承和多态

深入浅析java中面向对象的继承和多态?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。继承和多态一.this super关键字1.this: 可以在构造器中的第一代码中调用本
2023-05-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录