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(不同包子类):仅子类内部方法能访问父类
protected,test()可打印three;Demo031(不同包非子类):仅能访问
public;❗ 关键:即使创建子类
Son对象,外部也无法访问protected,只能在 Son 类内部用。
(2)

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