继承
面向对象-继承
1.类与类之间的关系
属性关系
参数关系
2. 继承关系(今天所学的内容)
举例:cat person animals biology的继承关系
Person,猫cat,动物Animalsa 都可以叫做生物类Biology的子类
* Animals是Biology类的直接子类
* Person cat是Biology类的间接子类,person和cat是Animals的直接子类
*
* 超类
* person cat直接父类是Animals,写在extends关键字后面的类
* person cat间接父类是Biology
*
* extends:继承
* 在java中,基础是单继承,一个子类只能有一个直接父类,但是可以有多个间接父类
* extsnds后面只写一个类
创建子类对象时,父类先被实例化,再去实例化子类
当英格兰北实例化时,一定会先实例化它的直接父类和间接父类
*子类的构造器可以有多个,但是必须和父类的构造器形式上统一
例:如果父类没有空参构造器,子类一定没有无参构造器
super关键字;代表调用父类的结构(方法,属性,构造器)
在子类当中使用super调用父类的构造器时,super(age)必须是第一句话
在子类当中使用this调用父类的构造器时,this(age)必须是第一位句话
调构造器两者只能二选一
面试题;super和this的区别
super:调用父类的属性,super可以省略,不代表任何对象,
super.age=20;
调用父类的方法;
super.drink();
this:调用当前类的属性,this可以省略,可以代表一个对象
this.name=(" ");
调用当前类的方法:
this.drink();
3.继承可以干什么?
访问权限修饰符
public
protected 受保护的,不同包的子类可以访问
默认
private
4.方法的覆盖(复写,覆盖 override)
子类可以重写父类的方法,也可以利用到父类中方法已经运算过的结果,在运算的基础上
5.*方法的重写的规则: 前提:继承被继承的关系
访问权限: 重写的方法权限不能低于被重写的方法,开发中一般都是等于
返回值类型:重写的方法的返回值可以不一样,但是必须是被重写方法返回值的子类
方法名:必须一样 参数列表:参数类型 参数个数必须一样
抛出异常:重写的方法不能抛出比被重写的方法更大的异常
开发中,如果重写,基本就是一模一样,我们只变方法体
6.final 关键字:最终的
final可以修饰的结构:
1.类 public final class
最终类,终极类,没有任何类可以继承
2.属性 private final string name
修饰的常量 不能改变
常量的命名规则:单词的所有字母大写,如果是多个单词,用下划线分离
常量不能只声明,不赋值
public class Ch01 {
private final String EMPLOYEE_NAME="哈哈";
public Ch01(String name){
this.name=name;
3.方法 private final void show
不能被重写,不能修饰构造器
方法重写的注解:建议在重写处标明重写的注解 Alt+shift+s
7.object 祖先类(最顶级父类)
如果一个类没有明确的写出它的父类是谁,那它的父类就是object
object类有11个方法
1.hashCode(); 它的返回值实际上就是对象运行时的内存地址
Ch01 ch01 =new Ch01();
System.out.println(ch01.hashCode());
2.equals(), 它和==没区别,比地址,为了让子类重写
3.toString(),转换成字符串 ,当我们直接使用对象时,会默认使用toString,为了让子类重写
4.finalize(),垃圾回收的方法
5.clone(),克隆,必须实现cLoneable接口
课堂实例:
public class Animal { String name; String age; private String id; public void say(){ System.out.println("动物叫"); } } 12345671234567123456789
public class Cat extends Animal {
String name="加菲猫";
public void say(){
System.out.println("喵喵叫");
}
}
public class Dog extends Animal{
String name="哈士奇";
public void say(){
System.out.println("汪汪叫");
}
}
私有属性
public void show(){
super.sex="男";父类的属性
this.sex="女"; 子类的属性
super.age;
super.getAge(); 调用父类get方法,获得父类私有属性super.setAge(55);
调用父类set方法,给父类私有属性赋值
}