Java基础-面向对象-继承和方法重写

111 阅读5分钟

面向对象-继承和方法重写

一.继承

1.继承的引入

​ 泛化:把子类共有的属性和方法抽取到父类的过程

​ 特化:在父类的基础上去扩充特殊(特有的)的属性和方法

​ 父类/基类 子类/派生类

2.语法:

class 子类的类名 extends 父类的名字{

}

3.权限修饰符

1690942188588转存失败,建议直接上传图片文件

图解(例如):

​ public:类,包,子类,不同的包 都可以修饰

public:可以修饰类,方法,成员变量,构造方法

​ protected:可以修饰方法,成员变量,构造方法*

​ 默认不写:可以修饰类,方法,成员变量,构造方法*

​ private:可以修饰方法,成员变量,构造方法*

3.1技巧:

类要么是public 要么不写

所有的修饰符都能修饰方法,成员变量,构造方法

局部变量基本没有去加权限修饰符这个说法

3.2子类可以继承父类的哪些内容:

​ 非私有的属性,方法,构造方法不能被继承

3.3继承的注意事项:

​ ①.Java里面的只是支持单继承

​ ②.支持多层级继承

1690945030991转存失败,建议直接上传图片文件

​ ③.每一个类都有一个直接父类,如果没有看到现实的继承代码,那么就隐式继承Object---超类,根类

​ 解释理解:java里面所有的类都是Object(对象)的子类(直接/间接)

例如:

package com.ronghuanet._02extends;

public class ExtendsTets {
    public static void main(String[] args) {
        A a = new A();

        B b = new B();


        C c = new C();

    }
}

// A其实是隐式继承自Object
class A{

}
class B extends A{

}
class C extends B{
    //C拥有 A,B里面的非私有化的属性和方法
}

二.方法覆写:override

(方法覆盖,方法重写)

1.注解:

@Override 检测当前方法是不是方法覆写

2.为了解决什么:

主要解决父类方法功能性的不足,当父类的方法不能去满足子类的需求时候,对父类的功能加强

3.语法:

​ 与父类方法一致

1.子类覆写方法的方法名必须和父类一致【把父类的方法copy到子类中】

2.子类方法的修饰符权限 不小于父类的修饰符权限【要么相同,要么大于父类修饰符的权限】

3.子类方法的返回值类型必须与父类相同或者是其子类

4.子类方法的形参列表必须和父类的形参列表相同

4.方法覆写以后的调用顺序:

优先调用子类自己的方法,如果子类没有再去父类里面找,如果父类也没有只有报错

5.相关面试题:

说说Overload 和 Override的区别?

三.super

1.

​ 可以看成是父类对象,可以使用父类的属性和方法【大多数情况下都是子类和父类有重名的内容,指定要使用父类的】

2.

​ 可以在子类的构造方法里面调用父类

​ 2.1子类的每一个构造方法里面都在隐式去调用父类的无参数构造方法

​ 2.2在子类的的构造方法里面调用父类必须写在第一句

其实在创建子类对象的时候父类的构造方法也要执行

3.注意:

​ 在一个构造方法里不能****同时使用thisspuer

四.抽象类

【抽象类就是由abstract修饰的类】

1.特点:

​ 1.1抽象类里面可以拥有的成员:成员变量,普通方法,抽象方法,构造方法

​ 1.2抽象类虽然有构造方法,但是不能在外部创建对象,因为构造方法默认是protect创建的

​ 1.3抽象类里面的抽象方法,子类必须覆写

2.抽象方法:

abstract修饰方法并且没有方法体

​ 抽象方法的主要作用是用来定义标准,不去定义实现

五.Object

​ 1.Class<?> getClass() 返回此对象的的运行时类

​ 2.int hashCode() 返回对象的哈希码值

​ 3.String toString() 返回对象的字符串表示形式

​ 4.boolean equals(Object obj) 比较两个对象是否相等

都没有static修饰,必须使用对象调用

①.对象的来源:

​ 所有的类都是Object的子类,任意一个类的对象都能够调用Object类里面的方法

②.返回对象的哈希码值

在java语言里面,每一个对象都有一个哈希码值值,---理解为就是对象存储在内存的地址值

③.返回对象的字符串表示形式

覆写tostring为了以后在输出打印对象时,打印对象里面储存数据而不是地址

④.比较两个内容是否相等:

==

用于基本数据类型比较,如果用于引用数据类型,比较的是对象的地址值是否相等

equals:

用于比较两个对象里面存储数据是否相等

面试题:

面试题:== 和 equals的区别?

解答:

==用于比较基本数据类型是否相等,如果用于引用数据类型比较的是对象的地址值,比较两个对象是否相等,需要使用equals,但是默认equals的底层还是== 所以我们需要重新覆写equals才能正常使用。