首页 > 编程语言 >0基础学java之Day14

0基础学java之Day14

时间:2024-10-24 19:47:49浏览次数:10  
标签:java 子类 基础 接口 Day14 抽象 抽象类 父类 方法

Object

含义:基类也叫做超类,Object是所有类的祖先类

注意:如果一个类没有明确继承的父类,默认继承Object

equals:比较两个对象内存地址是否相同

hashCode():获取对象的hash值

注意:1.hash码是内存地址+散列算法得到的一个数字

2.hash码不等于内存地址

3.hash码可能相同

getClass:获取类的字节码文件对象

使用到类,该类的class文件会加载到方法区,同时在类中创建class文件的对象,再通过对象找到class文件的访问入口(JVM不能直接访问class文件)

toString:获取对象的字符串表示

String判断两个字符串的逻辑:

1.先判断两个字符串对象的内存地址是否一致

2.再判断两个字符串数组的长度是否一致

3.循环判断字符串数组里的字符码值是否一致

标杆作用:Object作为所有类的父类,定义了几个方法,方便子类去重写

equals的标杆作用:比较两个对象是否相同,不同的对象比较规则不一样,所以子类重写即可

toString的标杆作用:每个子类都有不同的属性,重写toString直接打印该对象中所有的属性,方便观察数据

final

含义:最终

作用:

  1. 修饰类:该类不能被继承

  2. 修饰方法:该方法不能被重写

  3. 修饰变量:变成常量,不能重新赋值

    常量的命名规则:全大写,单词之间用下划线隔开

    常量的生命周期:存在常量池中,直到项目结束才会被销毁

抽象类及抽象方法(abstract)

//抽象类
public abstract class 类名{
    //抽象方法
    public abstract void method();
}

为什么需要有抽象类

父类是代表众多子类的共同特征,父类中的成员变量(即属性)、成员方法(即功能)是所有子类都有的。

当事物的分类层次变多之后,越上层的父类成员越少,越上层的父类会变的越来越抽象。甚至出现在父类中某个方法无法给出适用于所有子类的方法体实现。

例如:定义图形Graphic,所有图形都有求面积的方法area(),但是所有的子类:Rectangle矩形、Circle圆形、Triangle三角形等,它们的求面积公式都不相同,所以在父类图形Graphic中,area()没法给出具体的代码,因为没有一个通用的公式。

通常这样的方法,会被定义为抽象方法。抽象的关键字:abstract

【①其他修饰符】 abstract ②返回值类型 ③方法名(【④形参列表】);   //没有方法体,  它是抽象方法

Java中规定,凡是包含抽象方法的类,必须是抽象类。

【其他修饰符】 abstract class 类名{ //抽象类
    
}
package com.atguigu.special;
​
public abstract class Graphic {
    public abstract double area();
}
​

抽象方法交给非抽象的子类去实现(重写)

应用场景:当一个方法必须在父类中出现,但是这个方法又不好实现,就把该方法变成抽象方法,交给非抽象的子类去实现

面试题: 1.抽象类不能有构造方法?

抽象类可以有构造方法

2.抽象类中只能有抽象方法?

抽象类中有非抽象方法(成员方法和静态方法)

3.抽象类中不可以没有抽象方法?

抽象类中可以没有抽象方法,但是毫无意义

4.如果父类是抽象类,则子类必须实现父类的抽象方法?

不一定,子类如果是抽象类,可以不实现父类的抽象方法

5.可以使用new关键字来创建抽象类对象?

不可以,创建的是匿名内部类的对象

接口(interface)

为什么要有接口?

需求:

  • 定义一个Animal抽象父类,包含抽象方法eat

  • 定义一个非抽象的子类Bird,继承Animal,重写抽象方法eat,新增一个fly()

  • 定义一个非抽象的子类Fish,继承Animal,重写抽象方法eat,新增一个swim()

  • 定义一个非抽象的类Plane(飞机),没有继承Animal,也有一个方法fly()

问题1:Bird与Plane有相同的功能方法,fly方法,它应该被抽取它们的共同的父类中,但是Bird已经有一个直接父类Animal了,不能再继承另一个父类了?

原因:Java的类有单继承的限制。

解决:突破单继承的限制。需要引入接口的概念,来解决单继承的限制问题。

问题2:类与类之间需要是is-a的关系。例如Student is a Person。当某些类虽然有共同的方法,但是它们不适用用一个公共的父类来作为它们的总的分类。

原因:父类与子类应该是逻辑上属于一个事物类别,只是子类是更加具体的一个子类别。例如:学生是人这个大类别中的一个子类别,狗、鸟是动物这个大类别中的子类别。但是鸟、飞机、热气球、风筝等很难找到一个公共的事物分类。

解决:需要引入接口的概念,来突破is-a的关系。

定义接口:

【修饰符】 interface 接口名{
    //成员
}

接口的特点和要求

1、接口是抽象的,不能直接new对象

2、接口是用来被“实现的”,需要重写抽象方法

3、接口的成员与类的成员有大不同

含义:特殊的抽象类

注意:

  1. JDK1.7时,接口中只能有静态常量和抽象方法

  2. JDK1.8开始,接口中添加了静态方法和默认方法

应用场景:接口更像一个规范

抽象类 vs 接口

抽象类:成员变量、静态变量、静态常量、成员方法、静态方法

接口:静态常量、静态方法(JDK1.8)、默认方法(JDK1.8)

面试题:

1.一个类可以实现多个接口?可以

2.一个接口可以实现多个接口?不可以,接口与接口的关系是多继承

3.接口里面的方法不一定都是抽象的?JDK1.7时接口里只能有抽象方法,JDK1.8时接口可以有抽象方法和默认方法

4.接口解决了类的单继承问题?是的,因为类与类是单继承,类与接口是多实现

5.一个类是否可以继承一个类并同时实现多个接口?可以

6.接口可以new对象?接口是特殊的抽象类,但是本质还是抽象类,抽象类是不可以new对象的,接口也是不能new对象,new出来的匿名类内部类的对象

类 - 接口的关系:

类 - 类:单继承

类 - 接口:多实现

接口 - 接口:多继承

标签:java,子类,基础,接口,Day14,抽象,抽象类,父类,方法
From: https://blog.csdn.net/2301_81594623/article/details/143213443

相关文章

  • Java类和对象详解(下)
    目录前言:一.static关键字 1.static修饰成员变量2..static修饰成员方法3.静态代码块 二.代码块 1.普通代码块2.静态代码块3.静态代码块三.继承1.什么是继承2.为什么要继承3.继承的使用 4.父类的访问(super关键字)5. 子类构造方法6.代码执行顺序 7.组......
  • 基于Java的高校成绩报送系统的设计与实现(11870)
     有需要的同学,源代码和配套文档领取,加文章最下方的名片哦一、项目演示项目演示视频二、资料介绍完整源代码(前后端源代码+SQL脚本)配套文档(LW+PPT+开题报告)远程调试控屏包运行三、技术介绍Java语言SSM框架SpringBoot框架Vue框架JSP页面Mysql数据库IDEA/Eclipse开发四、项......
  • java启动命令详解
    java-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8002-server-Xms4g-Xmx6g-XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=/data/data/dump.bin-Dfile.encoding=UTF-8-Djava.awt.headless=true-XX:+UseG1GC-XX:MaxGCPauseMillis=200-XX:G1H......
  • JavaFX+JavaCV实现批量视频处理及批量生成视频开发笔记--003,批量视频混剪功能设计与代
    我要使用JavaFX+JavaCV实现一个桌面应用,可以打包成Windows和Mac的桌面应用。实现的功能是:批量视频混剪。具体操作是:在界面上选择一个文件夹或多个视频文件,对文件夹中的所有视频文件(仅.mp4格式)或者选中的文件进行处理,随机截取原视频中指定长度的视频片段(如5秒),拼接成多个新的......
  • 大模型能做什么?(非常详细),零基础入门到精通,看这一篇就够了
    前言在当今科技快速发展的时代,大模型(LargeModels)作为一种强大的工具,正逐渐在各个领域展现出其独特的魅力和价值。大模型,通常指的是那些参数规模庞大、能力强大的深度学习模型,它们能够处理海量的数据,学习复杂的模式,并在各种任务中展现出惊人的性能。那么,大模型究竟能做什么......
  • Python小白学习教程从入门到入坑------第十四课 函数基础(语法基础)
    一、函数def定义:将具有独立功能的代码块组织成一个整体,使其具有特殊功能的代码集作用:使用函数可以加强代码的复用性,提高编程续写的效率结构:def 函数名():     函数体注意:函数名要符合标识符规定,最好见名知意,调用函数前,必须保证函数已经存在eg:#1.定义函数#......
  • 实验2 类和对象_基础编程1
    实验任务1:实验代码:1#include<string>23//类T:声明4classT{5//对象属性、方法6public:7T(intx=0,inty=0);//普通构造函数8T(constT&t);//复制构造函数9T(T&&t);//移动构造函数10~T();......
  • Day10 函数基础+函数三种定义形式 + 函数的返回值、对象和参数 + 可变长参数
    目录0上节课复习0.1文件是什么0.2操作文件的步骤0.3open0.4指针操作0.5文件的复制1函数基础1.1函数的作用1.2函数的定义形式1.3函数定义的两个阶段2定义函数的三种形式2.1无参函数2.2有参函数2.3空函数3函数的返回值4函数对象5函数参数的应用5.1函数定义分为两个......
  • 12万字的java面试题及答案整理(2024新版)
    前言本来想着给自己放松一下,刷刷博客,慕然回首,final有哪些用法?static都有哪些用法?java的精度算法?java运算逻辑?异常处理?似乎有点模糊了,那就大概看一下Java基础面试题吧。好记性不如烂键盘***12万字的java面试题整理***final有哪些用法?final也是很多面试喜欢问的地方,但我觉得这个......
  • 2024-10-24 学习人工智能的Day14 pandas(1)
    一、基础1、概述Pandas是一个开源的第三方Python库,从Numpy和Matplotlib的基础上构建而来Pandas名字衍生自术语“paneldata”(面板数据)和“Pythondataanalysis”(Python数据分析)Pandas已经成为Python数据分析的必备高级工具,它的目标是成为强大、灵活、可以......