当前位置: 首页 > ds >正文

JAVA 继承

继承的简单介绍

即子类与子类之间具有的共同的属性包含于父类 (注意是共同的属性,不同属性的不在父类中)

子类与子类可以有不同的属性,但是不能差太大(如手机和人都具有姓名,年龄,但两者不是一种东西,所以不能放在一个父类中)

java仅支持单继承,不支持多继承,但是支持多层继承。

意思是一个子类只属于一个父类

支持多层继承含义如下图

子类能继承父类的内容

 示例

class Animal {public String name;         // 子类可直接继承protected int age;          // 子类可直接继承String color;               // 同包子类可继承private String secret;      // 不可直接继承
}class Cat extends Animal {void showInfo() {name = "咪咪";  // 直接访问 public 属性age = 2;       // 直接访问 protected 属性color = "白色"; // 同包下可访问默认属性// secret = "xxx"; // 编译错误!private 不可直接访问}
}

 

 示例

class Animal {private String dna;  // 私有属性,不可直接继承public Animal(String dna) { this.dna = dna; }public String getDna() {  // 通过公共方法间接访问私有属性return dna;}
}class Cat extends Animal {public Cat(String dna) {super(dna);  // 必须调用父类构造方法}void printDna() {// System.out.println(dna); // 编译错误!private 不可直接访问System.out.println(getDna()); // 通过公共方法获取}
}

借用公共方法与super来调用private修饰的部分

final关键字

 在继承中涉及到了一个关键字----final

final主要起到“禁止”的作用,如下图

示例如下 

class Animal {public final void sleep() {  // final方法,禁止重写System.out.println("动物睡觉");}
}class Cat extends Animal {// @Override// public void sleep() { ... } // 编译错误!final方法不可重写
}

明显,被final修饰后对正常的继承起到了很大的限制作用。

继承的实现

通过关键字extends实现,具体代码如下

父类:

public class Animal {public void eat(){System.out.println("赤石");}public void drink(){System.out.println("喝合淝水");}
}

子类(extends继承父类):

public class Cat extends Animal{public void catchMouse(){System.out.println("miao和老鼠");}
}

 方法的重写

子类可以重写父类的方法,但是有很多限制。如下:

 代码(不可运行,只是方便大家理解)

class Animal {void eat() { System.out.println("动物吃东西"); }
}
class Cat extends Animal {@Overridevoid eat() { System.out.println("猫吃鱼"); } // 重写父类方法
}

 构造方法与继承

 子类调用默认先调用无参构造方法

如果是父类的有参构造,调用要用到super,且必须子类构造方法放在首行。

代码如下(代码仅供理解,可能不可运行)

class Animal {Animal(String name) { System.out.println("动物名:" + name); }
}
class Cat extends Animal {public void chicken(String name) {super.chicken(name);}
}

很明显上述代码中name是有参的,所以调用了super。

访问修饰符的复习

上述的限制级逐渐上升。

综合上述,作者自己代码(可以直接运行,想玩玩的直接复制粘贴就行)

Main函数

public class Main {public static void main(String[] args) {Cat miaomiao = new Cat();miaomiao.eat();miaomiao.drink();miaomiao.catchMouse();System.out.println(".............................");Dog soxin = new Dog();soxin.eat();soxin.konw();soxin.chicken("mimi");soxin.lookingmyeye();soxin.ai("yuean");}
}

父类

public class Animal {
private String id;public void konw(){System.out.println("man ba out");}public void eat(){System.out.println("赤石");}public void drink(){System.out.println("喝合淝水");}public void chicken(String name){System.out.println("他是"+name);}
}

子类

public class Cat extends Animal{public void catchMouse(){System.out.println("miao和老鼠");}@Overridepublic void chicken(String name) {super.chicken(name);}
}

 

public class Dog extends Animal{public void lookingmyeye(){System.out.println("BABY tell me.why?why? ");}public void ai(String id){System.out.println("shi"+id);}
}

 运行结果

总结

合理利用继承的父类与子类,可以大大提高开发的速度与代码的美观性

多尝试新事物,Just do it

http://www.xdnf.cn/news/508.html

相关文章:

  • 【EDA软件】【设计约束和分析操作方法】
  • 【AI提示词】经济学家
  • 使用Ingress发布应用程序
  • MySQL——事务
  • 【java实现+4种变体完整例子】排序算法中【快速排序】的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格
  • Day4-存储技术概述
  • csdn教程
  • 统信UOS1060中恢复默认出厂设置
  • 使用 YOLOv8 模型对外接摄像头(设备索引为 1)实时分析
  • 端口镜像,
  • Java InvalidClassException 深度解析
  • Linux网络编程——I/O多路转接(2)之 poll、epoll
  • Mesh模型孔洞修补算法总汇
  • 【大疆dji】什么是ESDK?
  • 腾讯云对象存储m3u8文件使用腾讯播放器播放
  • 【HDFS入门】HDFS性能调优实战:小文件问题优化方案
  • 基于Springboot+Mysql的的小区物业管理系统(含LW+PPT+源码+系统演示视频+安装说明)
  • 【web服务_负载均衡Nginx】三、Nginx 实践应用与高级配置技巧
  • Vue+Notification 自定义消息通知组件 支持数据分页 实时更新
  • 【大疆dji】边缘计算模块在大疆机场中的位置
  • 双指针算法(部分例题解析)
  • STM 单片机主要系列及特点
  • 【Python办公】图片批量裁剪工具(GUI打包版)
  • 6.8 Python定时任务实战:APScheduler+Cron实现每日/每周自动化调度
  • 服务器简介(含硬件外观接口介绍)
  • 【C++】新手入门指南(上)
  • Spring AI 开发 - 快速入门
  • 让机器学习更透明:使用 Python 开发可解释性模型工具包
  • 检索增强生成(RAG)系统的技术演进、核心架构与优化实践
  • Python语法系列博客 · 第5期[特殊字符] 模块与包的导入:构建更大的程序结构