java中的oop(三)、构造器、javabean、uml类图、this、继承

!! 有get/set方法的情况基本就是说要搞个私有属性,不直接对外开放;

构造器

Person p = new Person(); 
//其中的Person();就是构造器;---造对象;

Constructor–建设者,建造者;

作用

  1. 搭配new 创建类的(对象)实例;
  2. 创建对象的同时,给对象的相关属性赋值;

使用说明

  1. 格式:
修饰符 类名(形参){}   
-****构造器的方法名和类名一样;*******
  1. 如果不写出构造器,会隐式创建和类同样修饰符的空参构造器;见代码Constructor1;
  2. 一旦显示定义构造器,隐式的空参构造器将失效(废话);
  3. 构造器可以有多个- -、重载;

构造方法和 方法 没有关系;

public class Constructor1 {public static void main(String[] args) {Constructor1 c1 = new Constructor1();Person p1 = new Person();Person p2 = new Person(1);//ctrl+p;可以展示参数;Person p3 = new Person(true);System.out.println(p3);}/* 构造器1 */public Constructor1() {System.out.println(111111);}
}class Person{/* 空参构造器 */public Person() {System.out.println("person构造器被调用!");}/* 构造器可以重载 */public Person(int a) {System.out.println("构造器可以重载!" + a);}public Person(String name) {System.out.println(name);
//        return name; //搞不成;搞不了返回值;}/*   这也搞不成*/public Person(boolean c) {System.out.println(c);
//        return new Person();}
}

匿名对象;

new Person(); //类似这样没有赋值给某个变量;
  1. 只能被调用一次;
  2. 常常作为实参传给方法
public class Noname {public static void main(String[] args) {/*实现接口的匿名类*/Q q= new Q(){public void m1() {System.out.println("interface_Q_m1");}};q.m1();new Q(){public void m1() {System.out.println("interface_Q_m1");}}.m1();/* 类的匿名子类 */new W() {public void m2(){System.out.println("class_W_m2");}}.m2();/* 匿名子类 */new W(){}.m2();/*相当于没有重写方法*/W w = new W(){};System.out.println(w.getClass());System.out.println(w.getClass().getSuperclass());}
}interface Q {void m1();
}class W {public void m2(){System.out.println("m2");}
}

对象的参数赋值顺序;

  • 1、默认赋值

  • 2、显示赋值; int a = 1;

  • 3、构造器赋值(构造器初始化)

  • 以上为对象创建过程中;(只能执行一次)

  • 4、对象。方法;

  • 5、对象。属性;

    JavaBean

一种对象规范?

定义:

是一种java语言写成的可重用组件;

标准:

必须有一个空参构造器;
类是公共的
有属性,且有set/get方法;

public class Bean {public static void main(String[] args) {}
}
class Customer {int id;public void setId(int i) {id = i;}public int getId() {return id;}
}

UML类图

统一建模语言
在这里插入图片描述

在这里插入图片描述

1、this;
2、继承性
3、super
4、多态:继承性的延续;

This

This:

在这里表示的就是对象;可以调用成员变量和方法;

场景:

  • 1、声明set方法时,通过形参给对应的属性赋值;如果形参和类中属性同名;
  • 2、构造器内,调用正在构建的类内的数和方法;重载多个构造器内调用封装的方法;

一般情况下会省略this.;
我就是不省略;–为了和js同步;

***** 构造器不能添加修饰符;

This(); 
//可以调用类中的其他构造器;
//必须写在构造器中的首行;
//每个构造器中最多声明一个;
class Person {
int age;
String name;public Person() {System.out.println(this.age);this.setAge(14);}public Person(String name) {this();this.name = name;}public Person(int age) {this("lucy");this.age = age;}public void setAge(int age) {age = age;System.out.println("age:" + age);//13System.out.println("this_age:" + this.age);//0/* 赋值失败,就近原则。形参给形参赋值,赋了个寂寞 */}}

如果一个类型有多个构造器,那么类中最多有n-1个构造器;
否则会搞出死循环;

继承

  • 1、从上而下:extends
  • 2、自下而上:
  • ruguo发现多个类相似很多,搞一个父类;

***继承都有一个is-a的关系;cat is-a animal;不能为了继承而继承;

格式:

class A{
}
class B extends A{
}
class C extends A{
}

子类获取了父类的所有属性和方法;同时在堆内存中,子类的内存中也有父类的属性和方法;

***虽然继承了,但是父类的私有属性及方法,子类中还是不能用;
Extends 延伸,扩展,延展;子类继承过来之后可以功能更强大;

默认父类;:java.lang.Object;

a.getClass().getSuperclass()
System.out.println(a.getClass().getSuperclass());//class java.lang.Object
//一个父类可以有多个子类;
public class Person {int age;String name;public void sleep() {System.out.println("sleep");}public void eat() {System.out.println("person_eat");}public Person() {System.out.println("null");}public Person(int age) {System.out.println("age");}
}
public class Student extends Person {int age;String school;public void eat() {System.out.println("sutdent_eat");}public void sleep() {System.out.println("student_sleep");}public void show() {super.eat();this.eat();eat();//省略this;}public void getAge() {System.out.println(age);System.out.println(super.age);System.out.println(this.age);//省略this;}public Student () {super(3); //nullSystem.out.println("student_null");//student_null}public Student(int age) {this();System.out.println("student_age"); //father_null;student_age;}
}
public static void main(String[] args) {Student st1 = new Student();st1.show();st1.age = 10;st1.getAge();Student st2 = new Student(1);}

重写

Overwirte、override;

子类可以使用父类的方法,但是又不那么合适;可以考虑使用;

定义:

子类对父类继承过来的方法进行覆盖、覆写;

  • 调用子类方法时,调用的就是子类重写后的方法;
权限修饰符 返回值类型 方法名(形参)[throw 异常类型] {方法体}
@Override
protected Object clone() throws CloneNotSupportedException {return super.clone();
}

规则:

  • 1、方法名和形参列表必须一致;
  • 2、子类重写的权限修饰符不得小于被重写的修饰符;public>protected>default;;
    • (1)特例;如果父类是private,子类则不能重写(子类也看不到了);
  • 3、返回值类型
    • (1)如果父类是void,则子类必须也是void;
    • (2)如果父类的返回值基本数据类型,则子类必须和父类相同;
    • (3)如果父类的返回值是引用类型,则子类可以和父类相同、或者返回父类的引用类型的子类类型;
  • 4、子类重写之后抛出的异常,可以和父类相同,也可以是子类的类型;

在这里插入图片描述

一般来说子类就和父类保持一致;

Super

理解为父类的。。。;

为什么要用?

  • 1、子类重写父类,子类还需要调用父类中被重写的方法;
  • 2、子类继承父类以后,子类和父类定义了同名属性;—属性不存在覆盖的说法;

如何使用

super.eat();

Super可以调用的结构:

1、属性、方法、构造器;

例子:

1、方法

在这里插入图片描述

This不加super:依次寻找自己-父类-父类。。。。。。。。。;找到Object为止;

2、属性;

public void getAge() {
System.out.println(age);
System.out.println(super.age);
System.out.println(this.age);//省略this;
}

、、、重名尽量避开,可读性太差;

3、构造器:

子类继承父类的时候是不会继承构造器的;

public Student () {
super(); //null
System.out.println("student_null");//student_null
}

****super()必须写在首行,和this();只能存在一个;

在构造器中:如果什么都没写,父类中默认调this();子类中默认调super();

public Student(int age) {
System.out.println("student_age"); //father_null;student_age;(默认调用父类空参构造器)
}

**如果不写空参构造器,有参构造器会覆盖空参构造器;此时子类构造器会报错;

正因为调用过父类的构造器,所以才会把父类的属性方法加载到子类的内存中供子类使用;

子类实例化的过程;

This

  • 可以调用的 结构
  • 1、属性、
  • 2、方法、
  • 3、构造器;
  • 1和2中可以理解为当前对象中;
  • 3中理解为当前正在创建的对象;可以调用其他重载的构造器;构造其中不声明默认调 super();

继承:

  • 继承性、
  • 1、好处:减少冗余;提高复用性; 提高扩展性;为多态的使用提供了前提;
  • 2、局限性:单继承性。
  • 多态性
  • 封装性;

重写:override

1、

Super:父类的;

  • 1、属性: super.xxx; ===> 子父类有权限且同名参数时使用;
  • 2、方法 super.xxx(); ===》子类重写了父类方法后,需要调用父类方法时;
  • 3、构造器 super(1); 子类构造器中首行必然super、this二选一;
public static void main(String[] args) {Student st1 = new Student();st1.show();st1.age = 10;st1.getAge();Student st2 = new Student(1);}

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

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

相关文章

docker学习-docker常用其他命令整理

随便写写,后面有空再更新 镜像命令,容器命令已在之前略有更新,这次不写, 一、后台启动命令 # 命令 docker run -d 容器名 # 例子 docker run -d centos # 启动centos,使用后台方式启动 # 问题: 使用doc…

大数据手册(Spark)--Spark 简介

Spark 简介 Apache Spark 是一种用于大数据工作负载的分布式开源处理系统。它使用内存中缓存和优化的查询执行方式,可针对任何规模的数据进行快速分析查询。Apache Spark 提供了简明、一致的 Java、Scala、Python 和 R 应用程序编程接口 (API)。 Apache Spark 是专…

代码随想录第四十三天|最后一块石头的重量 II 、目标和

题目链接:. - 力扣(LeetCode) 代码如下: 题目链接:. - 力扣(LeetCode) 代码如下:

用户行为分析与内容创新:Kompas.ai的数据驱动策略

在数字化营销的今天,用户行为数据分析已成为内容创新和策略调整的核心。通过深入理解用户的行为模式和偏好,品牌能够创造出更具吸引力和相关性的内容,从而实现精准营销。本文将探讨用户行为数据分析在内容创新和策略调整中的价值,…

【Linux】进程间通信方式之管道

🤖个人主页:晚风相伴-CSDN博客 💖如果觉得内容对你有帮助的话,还请给博主一键三连(点赞💜、收藏🧡、关注💚)吧 🙏如果内容有误的话,还望指出&…

【C++ | 语句】条件语句(if、switch)、循环语句(while、do while、for、范围for)、跳转语句、try语句块和异常处理

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 ⏰发布时间⏰:2024-05-02 2…

k8s部署skywalking(helm)

官方文档 官方文档说明:Backend setup | Apache SkyWalking官方helm源码:apache/skywalking-helm官方下载(包括agent、apm):Downloads | Apache SkyWalking 部署 根据官方helm提示,选择你自己部署的方式&#xff0c…

Petalinux的使用——定制Linux系统

文章目录 配置petalinux运行环境petalinux设计流程 配置petalinux运行环境 Petalinux的安装在文章Ubuntu镜像源的更改及其Petalinux的安装中已经介绍,下面介绍petalinux运行环境的配置过程。 进入到petalinux的安装路径下,使用下面的命令对petalinux的运…

C语言洛谷题目分享(11)回文质数

目录 1.前言 2.题目:回文质数 1.题目描述 2.输入格式 3.输出格式 4.输入输出样例 5.题解 3.小结 1.前言 哈喽大家好,今儿继续为大家分享一道蛮有价值的一道题,希望大家多多支持喔~ 2.题目:回文质数 1.题目描述 因为 151 …

【用文本生成歌声】Learn2Sing 2.0——歌声转换算法即梅尔频谱详解

一. 频谱图与梅尔谱图的介绍 频谱图:频谱图可以理解为一堆垂直堆叠在一起的快速傅里叶变换结果。 1.1 信号 在进入频谱图模块之前,首先我们需要了解信号是什么。 信号就是某一特定量随时间变化,对于音频来说,这个特定的变化量就…

pytest教程-43-钩子函数-pytest_report_header

领取资料,咨询答疑,请➕wei: June__Go 上一小节我们学习了pytest_runtest_makereport钩子函数的使用方法,本小节我们讲解一下pytest_report_header钩子函数的使用方法。 pytest_report_header 钩子函数允许你在 pytest 的终端报告的头部添…

七、 数据出境安全评估申报需要多长时间?

《评估申报指南(第二版)》未区分数据处理者进行数据出境安全评估线上申报和线下申报整体所需时间。一般情况下,数据出境安全评估的申报时长周期如图所示: 根据《评估申报指南(第二版)》第二条的规定&#…

跨越智能建筑桥梁:西门子PLC无缝对接BACnet楼宇自动化系统化

智能楼宇每一个环节的互联互通都至关重要,而PLC(可编程逻辑控制器)作为自动化领域的基石,其与BACnet协议的融合无疑成为了构建智能楼宇神经系统的关键节点。今天,让我们深入探讨如何利用先进的PLC转BACnet协议网关&…

使用Python实现2048小游戏

使用Python实现2048小游戏源码分享。实现效果如下所示。 实现效果图 游戏开始效果图 游戏结束效果图 部分源码截图 下载链接 基于如下的运行环境。运行需要安装tkinter /Library/Frameworks/Python.framework/Versions/3.7/bin/python/bin/python /Users/nihui/Documents/P…

AI预测体彩排3第3套算法实战化赚米验证第1弹2024年5月5日第1次测试

从今天开始,准备启用第3套算法,来验证下本算法的可行性。因为本算法通过近三十期的内测(内测版没有公开预测结果),发现本算法的预测结果优于其他所有算法的效果。彩票预测只有实战才能检验是否有效,只有真正…

电脑中的两个固态硬盘比一个好,想知道为什么吗

你当前的电脑很有可能有一个NVME SSD作为主驱动器,但可能至少还有一个插槽可以放另一个SSD,而且这样做可能是个好主意。 两个SSD可以提高性能 如果你有两个固态硬盘,你可以从中获得比有一个更好的性能。一种方法是使用RAID 0将两个驱动器组…

使用 PXE+Kickstart 批量网络自动装机

前言: 正常安装系统的话使用u盘一个一个安装会非常慢,所以批量安装的技术就出来了。 一、 概念 PXE (Preboot eXecute Environment,预启动执行环境)是由 Intel 公司开发的技术,可以让计算机通过网络来启动…

Calendar 366 II for Mac v2.15.5激活版:智能日历管理软件

在繁忙的工作和生活中,如何高效管理日程成为了许多人的难题。Calendar 366 II for Mac,作为一款全方位的日历管理软件,以其独特的功能和优秀的用户体验,成为您的日程好帮手。 Calendar 366 II for Mac支持多种视图模式&#xff0c…

【Java基础】设计模式——单例设计模式

单例设计模式(Singleton Design Pattern)是一种创建型设计模式,它确保⼀个类有且只有⼀个实例,并提供一个全局访问点来访问这个唯一实例。 单例模式主要解决的是,⼀个全局使⽤的类频繁的创建和消费,从⽽提…

vivado 低级别 SVF JTAG 命令

低级别 SVF JTAG 命令 注释 : 在 Versal ™ 器件上不支持 SVF 。 低级别 JTAG 命令允许您扫描多个 FPGA JTAG 链。针对链操作所生成的 SVF 命令使用这些低级别命令来访问链中的 FPGA 。 报头数据寄存器 (HDR) 和报头指令寄存器 (HIR) 语法 HDR length […