Loading...

文章背景图

Day 06-知识点汇总

2026-02-04
0
-
- 分钟

1.什么是继承?继承的好处?查看类成员的快捷键?

实现继承语法:  A extends B { }

(1)使用 extends 关键字,让两个类建立父子关系。抽取所有子类相同的属性和方法(共性抽取)到父类中,提高代码的重用性.

(2)好处:子类可以继承父类非私有成员,提高代码复用性,减少冗余代码(共性抽取)。

(3)快捷键:alt+7,查看当前类所有成员,点击inherited查看继承过来所有成员

2.两个类实现继承,需要满足什么条件?

子类是父类的一种,满足 is a 的关系

3.什么是权限修饰符?他们的访问范围分别是多少?public class有什么特殊点?

(1)就是是用来限制类中的成员(成员变量、成员方法、构造器)能够被访问的范围。

  • Fu 类(本类):所有修饰符都能直接访问,demo()方法可打印one/two/three/four

  • Demo021(同包其他类):能访问缺省 /protected/public,无法访问private

  • Son(不同包子类):仅子类内部方法能访问父类protectedtest()可打印three

  • Demo031(不同包非子类):仅能访问public

    ❗ 关键:即使创建子类Son对象,外部也无法访问protected,只能在 Son 类内部用。

(2)

27-12.png

(3)

在一个.java文件中可以创建多个类,但是public class只有一个,并且public class 类名要与文件名要一致

4.Java中的继承需要注意什么?

(1)Java中的类只能单继承:一个类只能继承一个直接父类。

(2)Java中的类可以多层继承:A继承B,B继承C,A类也拥有C类继承过来的非私有成员

(3)所有类的祖宗类是Object,要么直接继承Object,要么间接继承Object,或者默认继承Object

5.在子类方法中访问成员(成员变量、成员方法)有什么特点?

默认遵循就近原则:先在子类局部范围找,然后在子类成员范围找,最后到父类成员范围找,如果父类范围还没有找到则报错!

6.如果子父类中出现了重名的成员,如何区分调用?

(1)this.成员:访问本类(也就是子类)的成员变量或者成员方法

(2)super.成员:访问父类的成员变量或者成员方法

//指名打印当前类name,不让走就近原则,语法:this.成员变量或方法 System.out.println(this.name);//子类成员name

//指名打印父类的name,语法:super.非私有成员变量或方法 System.out.println(super.name);//父类成员name

7.什么是方法重写?

子类和父类有一模一样的方法声明就叫方法重写。

8.方法重写需要注意什么?

(1)可以使用@Override注解来标记一个方法是重写父类方法(作用:语法检查)

(2)重写方法的名称、形参列表必须和父类相同。

(3)私有方法和静态方法不能被重写。

(4)子类重写父类方法时,访问权限必须大于或者等于父类。

(5)方法重写可以使用快捷键alt+Insert,选择Override Methods

9.Object类的equals方法有什么作用

默认是比较两个对象的地址值,和“==”没区别,如果子类重写equals,则比较对象的属性值。

10.Object类的toString方法有什么作用?

默认返回对象在内存中的地址值,重写toString方法可以返回对象中的属性值。

11.面试题:==和equals方法有什么区别?

==可以比较基本类型和引用类型数据,比较基本类型数据比的是数据值,比较引用类型数据比的是地址值。

equals是Object类的一个方法,只能比较引用类型数据,默认比较地址值,重写equals方法可以比较对象的属性值。

12.面试题:方法重写和重载的区别?

方法重载:同一个类中方法名相同,参数列表不同的两个方法。

方法重写:子类和父类中有一模一样(返回值、方法名、参数列表一样)的方法声明。

13. 子类构造器有啥特点(子类访问父类构造器)?

子类的所有构造器,都会默认先调用父类的空参构造器,再执行自己。

目的: 先初始化父类公共成员,再初始化子类的独有成员

如果不采用默认,可以通过手动调用 super([参数列表]) 执行父类构造器,必须放在子类构造器第一句代码位置

14.super(参数值)调用父类有参数构造器的目的是什么?

为对象中包含父类的成员变量进行赋值。

15.this(…)的作用是什么?

在构造器中调用本类的其他构造器。

16.this(…)和super(…)的使用需要注意什么?

都必须放在构造器的第一行。

17.快捷键:显示参数列表?

ctrl+P 光标放到参数括号内

18.this(…)调用本类其他构造器(构造器复用)?

 //this([参数列表]) 用于调用本类构造器代码
    //添加一个2个参数构造器
    public Teacher(String name,int age){
        // setName(name);
        // setAge(age); 这样代码较多
        this(name,age,"班主任");//重用构造器,代码更加简洁
        // super(name,age);  不可以放在第二行位置
        //注意: this()和super()都必须放在第一行,这样有this()就不能super(),有super()就不能有this
    }

19.什么是多态?( 父类定义变量 实例用子类)

同一种方法在不同对象身上表现出不同的行为,父类类型引用可以接收不同子类对象

注意: 多态是行为的多态,Java中的属性(成员变量)不存在多态。(例如子类的方法不能重写,输出时依然会输出父类定义的数据)

20.多态的前提条件有哪些?

(1)有继承/实现关系;

(2)存在父类引用子类对象(例如:Animal a = new Cat() );

(3)存在方法重写。

21.多态的优点与缺点?

(1)多态的好处

定义方法时,使用父类类型的形参,可以接收一切子类对象,扩展性更强、更便利。

public static void main(String[] args) {
        Animal c1 = new Cat();
        Animal d1 = new Dog();
        feed2(c1);
        feed2(d1);
    }
    public static void feed2(Animal animal){
        animal.eat();
    }

(2)多态的弊端

多态下不能使用子类的独有(特有)功能。

22.类型转换有几种形式?能解决什么问题?

自动类型转换、强制类型转换。

可以把对象转换成其真正的类型,然后调用其特有的方法。

23.强制类型转换需要注意什么?

强转后的类型要和对象的真实类型相同,否则会报错(ClassCastException)。

24.强制类型转换前建议怎么做?jdk16之前之后的差别?

使用instanceof判断当前对象的真实类型,语法:对象 instanceof 类型 。

25.如何调用子类独有成员?

答:类型

//自动类型转换:父类引用子类对象

// 父类类型 变量名 = 子类类型对象

//强制类型转换:子类引用父类对象

// 子类类型 变量名 = (子类类型)父类类型对象

26.如何安全的类型转换?

(1)方式1: jdk16之前,先判断类型再转换

语法: if(父类对象 instanceof 子类类型){ 子类类型 变量名 = (子类类型)父类类型对象 }

含义: 判断父类对象里面存储的真实对象类型是否是指定的子类类型, 是返回true,不是返回false,为true才进行强制类型转换

[推荐](2)方式2: jdk17及其之后,既判断类型又同时进行转换

语法: if(父类对象 instanceof 子类类型 转换后的变量名){ 可以直接转换后的变量名 }

含义: 判断父类对象里面存储的真实对象类型是否是指定的子类类型, 如果是直接进行强制类型转换,赋值给转换后的变量名

27.final关键字修改类、方法、变量各有什么特征?

(1)修饰类:该类被称为最终类,类不能被继承。

(2)修饰方法:该方法被称为最终方法,方法不能被重写。

(3)修饰变量:该变量仅能被赋值一次。

28.final关键字修饰变量需要注意什么?

(1)final修饰基本类型的变量,变量存储的数据不能被改变。

(2)final修饰引用类型的变量,变量存储的地址不能被改变,但地址所指向对象的内容是可以被改变的。

29.什么是常量?有什么作用?

(1)使用了 static final 修饰的成员变量就被称为常量.

(2)作用:常用于记录系统的一些固定信息。

30.常量的命名规范是什么?

建议使用大写英文单词,多个单词使用下划线连接起来。

31.使用常量记录系统配置信息的优势。

(1)代码可读性更好,可维护性也更好。

(2)程序编译后:出现常量的地方全部会被替换成其记住的字面量,这样可以保证使用常量和直接用字面量的性能是一样的。

评论交流

文章目录