一起学JAVA 继承 super

一起学JAVA 继承 super1 继承 1 1 概念继承是面向对象最显著的一个特征继承是从已有的类中派生出新的类 新的类能吸收已有类的数据属性和行为 并扩展新的能力 Java 继承是会用已存在的类的定义作为基础建立新类的技术新类的定义可以增加新的数据或者新的功能 也可以使用父类的功能 但不能选择性的继承父类 超类 基类 这种继承使得复用以前的代码非常容易 能够大大的缩短开发的周期 降低开发费用 1 2 特点使用 extends 关键字来表示继承关系相当于子类把父类的功能复制了一份 Java 只支持单继承继承可以传递 爷爷 儿子

1 继承

1.1概念

1.2 特点

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

1.3 练习:继承入门案例

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.利用对象调用方法进行测试 /*3.继承相当于是子类将父类的功能复制了一份 继承还具有传递性,爷爷的功能会传给爸爸,爸爸的功能会传给孙子*/ a.eat();//爷爷类使用自己的方法 c.eat();//爸爸类可以使用从爷爷类中继承过来的方法 m.eat();//孙子类也可以使用从爷爷类中继承过来的方法 } } /*1.我们通过extends关键字建立子类与父类的继承关系,格式:子类 extends 父类*/ /*2.Java只支持单继承,一个子类只能有一个父类,但是一个父类可以有多个子类*/ //1.创建小动物类--爷爷类 class Animal{ 
    //4.添加爷爷类的普通方法 public void eat(){ 
    System.out.println("小动物Animal吃啥都行~"); } } //2.创建小猫类--爸爸类 /*6.继承是is a的关系,比如小猫是小动物,MiaoMiao是一只小猫 * 继承要求子类必须是父类的一种下属类型,依赖性非常强,强耦合*/ class Cat extends Animal{ 
    //7.定义爸爸类中的属性 int a = 10;//普通属性 private int b = 100;//私有属性 } //3.创建MiaoMiao类--孙子类 class MiaoMiao extends Cat{ 
    /*4.子类可以拥有自己独有的方法,实现了功能的拓展,青出于蓝而胜于蓝*/ //8.定义孙子类的方法 public void studyJava(){ 
    System.out.println("正在学Java"); System.out.println(a); /*5.子类继承了父类以后,可以使用父类的所有非私有资源 * 注意:这个私有资源由于被private修饰,所以没有访问权限*/ //System.out.println(b);//不可以,私有资源被限制访问 } } 

2 super

3 继承的用法

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

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 /*当父类的成员变量与子类的成员变量同名时,可以使用super指定父类的成员变量 * 我们可以把super看作是父类的对象:Father super = new Father();*/ System.out.println(super.sum);//1 System.out.println(count); } } 

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

package cn.tedu.oop2; /*本类用于测试继承中构造方法的使用 * 1.子类在创建对象时,默认会先调用父类的构造方法 * 2.原因是子类构造函数中的第一行默认存在super();--表示调用父类的无参构造 * 3.当父类没有无参构造时,可以通过super(参数)调用父类的其他含参构造 * 子类必须调用一个父类的构造函数,不管是无参还是含参,选一个即可 * 4.构造方法不可以被继承!因为语法的原因:要求构造方法的名字必须是本类类名 * 不能在子类中出现一个父类名字的构造方法*/ 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

  1. 继承以后,子类就拥有了父类的功能
  2. 在子类中,可以添加子类特有的功能,也可以修改父类的原有功能
  3. 子类中方法的签名与父类完全一样时,会发生覆盖/复写的现象
  4. 注意: 父类的私有方法不能被重写
  5. 重写的要求:两同两小一大
    两同:方法名 参数列表 要完全一致
    两小:
    子类返回值类型小于等于父类的返回值类型(注意此处说的是继承关系,不是值大小)
    子类抛出异常小于等于父类方法抛出异常
    一大:子类方法的修饰符权限要大于等于父类被重写方法的修饰符权限










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

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.如果子类对父类的方法不满意,可以重写父类的方法 /*重写的原则:两同 两小 一大 * 两同:子类方法的 方法名与参数列表 和父类方法的相同 * 一大:子类方法的 方法修饰符权限 >= 父类方法的 * 两小:子类方法的返回值类型 <= 父类方法的返回值类型 * 注意:这里所说的<=是指子类方法的返回值类型是父类返回值类型的子类 * 或者与父类的返回值类型一致,如果父类方法的返回值类型是void,子类保持一致即可 * */ @Override //注解,用来加在方法上,表示这是一个重写的方法 public void eat(){ 
    System.out.println("儿子爱吃蔬菜"); } @Override public void play(){ 
    System.out.println("儿子爱玩游戏"); } } 

5. 拓展

5.1 继承的好处与坏处

5.1 this与super的区别

5.2 重载Overload 与重写Override的区别

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/214120.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午4:56
下一篇 2026年3月18日 下午4:57


相关推荐

  • wpf 如何在后台设置附加属性的值

    wpf 如何在后台设置附加属性的值System Windows Controls Grid SetRow btnOk 0 System Windows Controls Grid SetColumn btnOk 0 就是这个格式就可以了

    2026年3月18日
    2
  • 嵌入式软件工程师前期职业生涯规划

    嵌入式软件工程师前期职业生涯规划ARM LINUX 路线 主攻嵌入式 Linux 操作系统及其上应用软件开发目标 1 掌握主流嵌入式微处理器的结构与原理 初步定为 arm9 2 必须掌握一个嵌入式操作系统 nbsp 初步定为 uclinux 或 linux 版本待定 nbsp 3 必须熟悉嵌入式软件开发流程并至少做一个嵌入式软件项目

    2026年3月18日
    2
  • JsonObject和JsonArray转换问题

    JsonObject和JsonArray转换问题开发过程中遇到需要将调用接口返回的JsonObject转换为JsonArray格式的数据,在使用过成中遇到转换问题,代码如下publicstaticJSONObjectgetRecJsonObj(StringstuId,StringschoolDate){Stringjson;try{json=Jsoup.connect(UrlConfig.URL+”GetStudentInfo?stuId=”+stuId+

    2022年5月31日
    42
  • jwplayer html插件,jwplayer进阶HTML5

    jwplayer html插件,jwplayer进阶HTML5主要是描述了整体搭建方法 以及使用 jwplayer 在 flash 方面的应用 如果想基于 HTML5 做 HTTP 伪媒体流服务器也可以 简单的改下 HTML 代码即可 Loadingthepl jwplayer container setup flashplayer static player swf file static video mp4 height 622 w

    2026年3月26日
    2
  • 蓝桥杯猴子分香蕉_蓝桥杯少儿编程大赛试题

    蓝桥杯猴子分香蕉_蓝桥杯少儿编程大赛试题packageexec;importjava.util.Scanner;/**问题描述  秋天到了,n只猴子采摘了一大堆苹果放到山洞里,约定第二天平分。这些猴子很崇拜猴王孙悟空,所以都想给他留一些苹果。第一只猴子悄悄来到山洞,把苹果平均分成n份,把剩下的m个苹果吃了,然后藏起来一份,最后把剩下的苹果重新合在一起。这些猴子依次悄悄来到山洞,都做同样的操作,恰好每次都剩下了m个苹果

    2022年10月11日
    9
  • 箱体图_原理图和箱体图

    箱体图_原理图和箱体图多组维度不一样长的箱体图的画法

    2022年8月6日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号