mosh java 2.4 inheritance继承

news2024/11/18 7:31:47

1.面向对象编程的第三个特点 继承

 

继承的好处

 

 java不能继承多个父级

代码文件结构

1.main.java


package org.example;
//package org.codewithme;

//import org.example.UIControl;

//TIP To <b>Run</b> code, press <shortcut actionId="Run"/> or
// click the <icon src="AllIcons.Actions.Execute"/> icon in the gutter.
public class Main {
    public static void main(String[] args) {
// var control = new TextBox();
// control.
//        control.disable();
//        System.out.println(control.isEnabled());
//        var obj = new Object();
//        obj.

//        var box1 = new TextBox();
//        var box2 =box1;
//        System.out.println(box1.hashCode());
//        System.out.println(box2.hashCode());//这个对象的地址的哈希值
//        System.out.println(box1.equals(box2));

//        var box1 = new TextBox();
//        var box2 =new TextBox();
//        System.out.println(box1.equals(box2));
//        System.out.println(box1.toString());

//        2.不想重复编码 使用inheritance

//      3.  访问修饰符
//        public成员可以在class外被访问 而private不能
//
        var textBox = new TextBox();
//        new UIControl(true).is
//        protected 修饰的变量在这个包里是公共的

//        4.方法重写 overriding 重写继承至父类的方法
//        方法重构 overloading ,同一个名字的方法 传参不一样
//        var textBox = new TextBox();
//        textBox.setText("hello world");
//        System.out.println(textBox);//不用显示调用textBox.toString(),因为printline方法自动会调用,任何传到这个括号里的对象 的toString()方法

//        System.out.println(textBox.toString());

//        5.upcasting和downcasting

//        var control = new UIControl(true);
//        var textBox = new TextBox();
//        show(textBox);//TextBox class中继承了uI ctrolclas

//        6.比较两个对象
//var point1 = new Point(1,2);
//var point2 = new Point(1,2);
//        System.out.println(point1==point2);//point1和point2都是引用类型,这俩东西储存的是point对象在内存中的地址,这是两个不同的对象 所以这两个变量中有不同的值
        System.out.println(point1.equals(point2));
        System.out.println(point1.equals(textBox));
        System.out.println(point1.equals(point1));
//        System.out.println(point1.hashCode());
//        System.out.println(point2.hashCode());

//
//        7.面向编程的第四个特点 多态
//UIControl[] controls = {new TextBox(),new CheckBox()};
//for (var control : controls){//for (元素类型 变量名 : 集合或数组)
//    control.render();//多态的体现 每个类都有自己各自的render方法 而不是在主方法里写 fat if else语句
//}

//  8.抽象类和方法

//       a.
//        var uiControl = new UIControl();

//        b.final classes 当声明一个class为此类型时 不能再extends它了

//        9.多重继承 python c++类语言可以继承多个父级 但也因为带来了一些复杂性 所以java没有多重继承
    }
//    5.upcasting和downcasting的函数
//    public static void show(UIControl control){//调用这个方法时 TextBox被自动转换成UIControl类型,这就是upcasting
//        if (control instanceof TextBox){//control是否是TextBox class的实列
//            var textBox=(TextBox)control;//显示转换此对象为TextBox类型
//            textBox.setText("ddd");//这就是downcasting,使用时要确定传到这个函数里的对象它原本就是Textbox的实列,这样就可以安全地将其转换成TextBVox了
//        }
//        System.out.println(control);
//    }
}

 2.uicontrol.java

package org.example;

public abstract class UIControl {//声明这一类为abstract后 此class不能再被实列化了 ,只能继承extends 它
//    private boolean isEnabled = true;
protected boolean isEnabled = true;//protected is public in pacakage,即只要在package org.example;中isEnabled就是公共字段

//    public UIControl(boolean isEnabled) {
//        this.isEnabled =isEnabled;
//        System.out.println("ui conrol");
//    }

//    public void enable(){
//        isEnabled = true;
//    }
public final void enable(){//final 方法是不能override的
    isEnabled = true;
}

    public void disable(){
        isEnabled = false;
    }

    public boolean isEnabled(){
        return isEnabled;
    }

//    定义一个泛型方法
//    public void render(){
//
//    }

    public abstract void render();//声明此方法为abstract 删除{}编成方法的声明而不是实现
}

3.textbox class

package org.example;

public class TextBox extends UIControl {
//    textBox继承了uiconrol class中所有的特性
//
    private String text = "";

//    public TextBox() {
//        super(true);//显示调用父级 extends对象的构造函数
        this.is//subclass不能访问 baseClass的private field methods
        System.out.println("text box");
//    }

    public void setText(String text) {
        this.text = text;
    }

    public void clear() {
        text = "";
    }

    @Override//这种叫注释,这一句的目的是告诉java我们重写了toString这个方法
    public String  toString(){
        return text;
    }

    @Override
    public void render() {
        System.out.println("render textbox");
    }
}

4.checkbox java

package org.example;

//public abstract class CheckBox extends UIControl{//因为extends了ui control 这个render方法 要不就要实现 要不就要也声明为abstract
    @Override
    public void render() {//这个render方法 要不就要实现 要不就要也声明为abstract
        System.out.println("render checkbox");
    }
//}
public final class CheckBox extends UIControl{//因为extends了ui control 这个render方法 要不就要实现 要不就要也声明为abstract
    @Override
    public void render() {//这个render方法 要不就要实现 要不就要也声明为abstract
        System.out.println("render checkbox");
    }


}

//public class MyCheckBox extends CheckBox{}
//public class MyCheckBox extends String{}//String class是不可继承的

5.point.java

package org.example;

import java.util.Objects;

public class Point {

    private int x;
    private int y;

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }




//    @Override
//    public boolean equals(Object obj) {
//        if(this == obj)
//            return true;
//
//        if (!(obj instanceof Point))
//            return false;
//        var other = (Point) obj;
//            return other.x == x && other.y == y;
        if (obj instanceof Point) {
            var other = (Point) obj;
            return other.x == x && other.y == y;
        }
        return false;
//    }
//

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Point point = (Point) o;
        return x == point.x && y == point.y;
    }

    @Override
    public int hashCode() {
        return Objects.hash(x, y);
    }
//    @Override
//    public int hashCode() {
//       return Objects.hash(x,y);//哈希值理论上是 标志对象的唯一值
//    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2133130.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《深度学习》PyTorch 手写数字识别 案例解析及实现 <上>

目录 一、了解MINIST数据集 1、什么是MINIST 2、查看MINIST由来 二、实操代码 1、下载训练数据集 2、下载测试数据集 运行结果&#xff1a; 3、展示手写数字图片 运行结果&#xff1a; 4、打包图片 运行结果&#xff1a; 5、判断当前pytorch使用的设备 1&#xff…

RK3568 外接摄像头预览方向错误

1.测试发现摄像头预览方向被旋转了90度 2.问题原因: device\rockchip\common\external_camera_config.xml 配置文件旋转了90度: 3.解决对策 修改orientation为0度

MultiSnapRecyclerView:让Android RecyclerView的滚动停靠更灵活

在Android应用开发中&#xff0c;RecyclerView是一个强大且灵活的组件&#xff0c;用于展示大量数据集合。然而&#xff0c;标准的RecyclerView只支持单一的滚动停靠点&#xff0c;这在某些场景下可能不够灵活。为了解决这个问题&#xff0c;TakuSemba开发了一个名为MultiSnapR…

Vue3+TS项目给el-button统一封装一个点击后转圈效果的钩子函数按钮防抖

前言 每个按钮都要单独定义一个loading变量&#xff0c;并且在接口请求前修改为true&#xff0c;接口响应后再修改为false&#xff0c;封装后这段重复的逻辑就可以统一管理不用每次都写一遍了。 效果 新建一个公共的src\common.ts import { ref } from "vue"expor…

Apache-wed服务器环境的安装

一。安装httpd并且开启httpd yum install httpd systemctl start httpd 二。关闭防火墙 systemctl stop firewall 三。常规配置wed服务 mkdir /www vim index.html&#xff08;里面写入自己的内容&#xff09; chmod 755 index.htm chmod 755 /www vim /etc/httpd/co…

管家婆云辉煌手机端怎么连接蓝牙打印机?

管家婆云辉煌手机端可以连接蓝牙打印机&#xff0c;这样手机可以发送打印任务到蓝牙打印机&#xff0c;完成打印任务。具体的设置步骤如下&#xff1a; 一、首先完成手机和蓝牙打印机配对&#xff0c;打开蓝牙打印机后。手机开启蓝牙和定位服务 点击手机设置&#xff0c;进入手…

价值流案例研究:实战经验与成功实践的深度解析

价值流在实际应用中的强大效益 在全球化和数字化竞争愈加激烈的背景下&#xff0c;企业正面临如何优化内部流程、提升客户体验、减少成本和提高效益的多重挑战。《价值流指南》不仅是一种理论工具&#xff0c;更为企业提供了系统化的实践框架&#xff0c;以实现从理论到实战的…

Threejs之加载3D模型(上)

本文目录 前言一、模型类型1.1 支持的模型类型1.2 模型加载器 二、常用模型加载器2.1 代码示例2.1.1 GLTFLoader2.1.1.1 代码2.1.1.2 效果 前言 Three.js 是一个基于 WebGL 的 JavaScript 3D 库&#xff0c;它提供了丰富的 API 来在网页上创建和显示 3D 图形。加载 3D 模型到 T…

(学习总结16)C++模版2

C模版2 一、非类型模板参数二、模板的特化1. 概念2. 函数模板特化3. 类模板特化全特化偏特化类模板特化应用示例 三、模板分离编译1. 什么是分离编译2. 模板的分离编译3. 解决方法 模板总结 以下代码环境为 VS2022 C。 一、非类型模板参数 模板参数分为类型形参与非类型形参。…

硬件实用技巧:螺丝M标准、螺丝长度以及螺帽M直径

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/142205318 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

[LWIP] 如何实现LWIP热插拔功能

LWIP 1.4.1 硬件stm32f429 HAL 1.8.1 UCOSIII 步骤如下 1、在lwip的opt.h中使能宏定义LWIP_NETIF_LINK_CALLBACK 链接发生变化时调用回调函数 2、在初始化结束后调用函数netif_set_link_callback&#xff0c;为网卡设置一个回调函数&#xff0c;回调参考代码如下 /*** bri…

【诉讼流程-健身房-违约-私教课-多次沟通无效-民事诉讼-自我学习-铺平通往法律的阶梯-讲解(1)】

【诉讼流程-健身房-违约-私教课-多次沟通无效-前期法律流程-民事诉讼-自我学习-铺平通往法律的阶梯-讲解&#xff08;1&#xff09;】 &#xff08;1&#xff09;前言说明1、目的2、说明1- 本章你将会看到的内容2 - 健身房其中一些套路1、先给予体验课。2、合同里的文字陷阱3、…

【DOA估计】一种基于高阶广义奇异值分解的多声源方向估计方法【附MATLAB代码】

微信公众号&#xff1a;EW Frontier QQ交流群&#xff1a;554073254 摘要 一种基于高阶广义奇异值分解的多声源方位估计方法本文提出了一种有效的宽带声源波达方向&#xff08;DOA&#xff09;估计方法。所提出的框架提供了一种有效的方法来构建一个宽带互相关矩阵从多个窄带互…

压测服务器并使用 Grafana 进行可视化

简介 仓库代码 GitCode - 全球开发者的开源社区,开源代码托管平台 参考 Welcome! - The Apache HTTP Server Project Grafana | 查询、可视化、警报观测平台 https://prometheus.io/docs/introduction/overview/

html+css+js网页设计 旅游 厦门旅游网10个页面

htmlcssjs网页设计 旅游 厦门旅游网10个页面 网页作品代码简单&#xff0c;可使用任意HTML辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源码 1&am…

基于vue框架的宠物寄养系统3d388(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,宠物信息,宠物分类,寄养店,宠物寄养,宠物领养,家庭环境,用户宠物 开题报告内容 基于Vue框架的宠物寄养系统开题报告 一、引言 随着人们生活水平的提高和宠物文化的普及&#xff0c;宠物已成为许多家庭不可或缺的一员。因此&…

windows和linux安装mysql5.7.31保姆级教程

一&#xff0c;资源如下&#xff0c;里面有windows和linux版的安装软件&#xff0c;内含Visual C2013中文版windows系统插件 windows资源地址&#xff1a;https://download.csdn.net/download/l1o3v1e4ding/89725150 linux&#xff08;centos&#xff09;资源地址&#xff1a;…

线性基大发现

一.构造方法 1.贪心法&#xff08;每一个数往里插入即可&#xff09; /*贪心法构造线性基的特点&#xff1a; 1.从小到大排列 2.各个基的高位可能存在重复的1 2.线性基不是唯一的&#xff0c;与原集合的元素顺序有关*/ void insert(int x){//贪心法for(int i63;i>0;i--){i…

“百度热搜”揭示月饼遇冷背后:如何在经济下行中理性消费 + 应对风险?

中秋将至,月饼本该成为节日的主角。然而,令人惊讶的是,近期的“百度热搜”显示月饼销售出现了前所未有的冷遇。这背后的原因是什么?在经济下行的背景下,人们的消费观念正悄然转变。今天,我们就来聊聊如何在这样的经济环境中保持理性消费,并应对潜在的经济风险。 经济下行…

数组去重、数组扁平化

数组去重 排序然后for循环判断相邻的两个是否一样 定义新数组&#xff0c;for循环新数组中没有这个元素就添加 利用对象的键&#xff0c;需要新建对象和数组 利用双重for循环判断 利用for循环和indexOf判断是否存在 利用newSet构造函数不接受重复数据 数组扁平化