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

0基础学java之Day14

时间:2024-10-24 19:47:49浏览次数:14  
标签: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

相关文章

  • Python小白学习教程从入门到入坑------第十四课 函数基础(语法基础)
    一、函数def定义:将具有独立功能的代码块组织成一个整体,使其具有特殊功能的代码集作用:使用函数可以加强代码的复用性,提高编程续写的效率结构:def 函数名():     函数体注意:函数名要符合标识符规定,最好见名知意,调用函数前,必须保证函数已经存在eg:#1.定义函数#......