一,继承概念
1.继承是面对对象三大特征之一,是java中实现代码重用的重要手段之一。
java中只支持单继承,即每个类只能有一个父类。
2.子类可以继承父类的哪些东西:
(1)继承public和protected修饰的属性和方法,无论子类和父类是否在同一个包里。
(2)继承默认权限修饰符的属性和方法,但是子类和父类必须在同一个包里。
3.不能被继承的父类成员:
(1)private成员
(2)子类与父类不在同包,使用默认访问权限的成员
(3)构造方法
二,继承语法:
1.编写父类(或者叫基类,超类)
class Pet {
//公共的属性和方法
}
2.编写子类(SubClass),继承父类(SuperClass)
class Dog extends Pet {
//子类特有属性和方法
}
三,子类访问父类成员:
1.访问父类构造方法:
super();
super(name);
2.访问父类属性
super.name;
3.访问父类方法
super.print();
4.(1).super代表当前对象的直接父类对象的默认引用。
(2)super必须出现在子类(子类的构造方法)中,切必须是第一句。
(3)不可访问父类中定义为private的属性和方法。
三,多重继承关系的初始化顺序:
四,继承关系中的构造方法
(1)如果子类的构造方法中没有通过super显式调用父类的有参构造方法,也没有通过this显式调用自身的其他构造方法,则系统会默认先调用父类的无参构造方法。
(2)如果子类的构造方法中通过super显式调用父类的有参构造,则将执行父类相应的构造方法,而不执行父类的无参构造方法。
(3)如果子类的构造方法中通过this显式调用自身的其他构造方法,则在相应构造方法中应用以上两条规则。
五,什么时候用继承
(1)符合is-a关系的设计使用继承
(2)继承是代码重用的一种方式(将子类共有的属性和行为放到父类中 )
六,方法重写(overriding)
1.定义:
方法重写:在子类中可以根据需求对从父类继承的方法进行重写,称为方法的重写或方法的覆盖。
2.方法重写的规则:
(1)重写方法和被重写方法必须具有相同的方法名
(2)重写方法和被重写方法必须具有相同的参数列表
(3)重写方法的返回值类型必须和被重写方法的返回值相同或者是其子类
(4)重写方法不能缩小被重写方法的访问权限
七,面试题:重写与重载的区别(override与overload的区别)
方法重写的特点(override)
前提:必须是继承关系
特征:
方法名相同
参数列表相同
返回值类型相同
访问修饰符不能小于被重写方法的访问修饰符
不能抛出比父类更多的异常
方法重载的特点(overload)
前提:在同一个类中
特征:
方法名相同
参数列表必须相不同
返回值类型无关
访问修饰符无关
八,Object类
1.Object类是所有类的父类。
2.在定义一个类时,没有使用extends关键字,也就是没有显式地继承某个类,那个这个类直接继承Object类。所有对象都继承Object类的方法。
3.object的常用方法:
九,重写Object类的equals()方法
public class Student {
int id;
String name;
public Student (int id,String name){
this.id = id;
this.name = name;
}
public boolean equals(Object obj){
boolean falg = false;
Student other = (Student) obj;
if (this.name.equals(name) && this.id == other.id){
falg = true;
}
return falg;
}
public static void main(String[] args) {
Student num = new Student(100,"小明");
Student num2 = new Student(100,"小明");
System.out.println(num.equals(num2));
System.out.println(num.equals(num2) ? "num和num2是同一个人" : "num和num2是同一个人" ) ;
}
}
十,final修饰符
1.作用:在Java中,final修饰符可以用来修饰类、方法和变量(包括成员变量和局部变量)
2.修饰类:当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。
3.使用final修饰的方法表示此方法已经是“最后的、最终的”含义,亦即此方法不能被重写(可以重载多个final修饰的方法)。
4.final成员变量表示常量,只能被赋值一次,赋值后值不可以改变。
5.final修饰一个成员变量(属性),必须要显示初始化。这里有两种初始化方式,一种是在变量声明的时候初始化;第二种方法是在声明变量的时候不赋初值,但是要在这个变量所在的类的所有的构造函数中对这个变量赋初值。
5.当final修饰一个基本数据类型时,表示该基本数据类型的值一旦在初始化后便不能发生变化;如果final修饰一个引用类型时,则在对其初始化之后便不能再让其指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。
十一,面试题:使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
final修饰一个基本数据类型时,表示该基本数据类型的值一旦在初始化后便不能发生变化;如果final修饰一个引用类型时,则在对其初始化之后便不能再让其指向其他对象了,但该引用所指向的对象的内容是可以发生变化的
十二,总结: