笔记
继承
子类继承父类的功能 extends 父类的名称
例 人—》男人 、女人------》经理
父类:舅舅
package edu.xcdq.demo;
/**
* @qvthor liuwenzheng
* @date 2021/4/22 16:28
*/
public class Uncle {
private String name ;
private int age ;
// getter setter
public void setName (String name){
this.name = name ;
}
public String getName(){
return name ;
}
public void setAge(int age){
this.age = age ;
}
public int getAge(){
return age ;
}
// 发红包
public void fahongbao(){
System.out.println("舅舅再发红包");
}
}
子类:大舅
package edu.xcdq.demo;
import edu.xcdq.demo.Uncle;
/**
* @qvthor liuwenzheng
* @date 2021/4/22 16:33
*/
public class UncleOne extends Uncle {
public void chouyan(){
System.out.println("大舅喜欢抽烟");
}
}
子类:二舅
package edu.xcdq.demo;
import edu.xcdq.demo.Uncle;
/**
* @qvthor liuwenzheng
* @date 2021/4/22 16:34
*/
public class Uncletwo extends Uncle {
public void deinkWine(){
System.out.println("二舅喜欢喝酒");
}
}
子类只能继承一个父类,不能继承多个父类 多重继承
//错误代码
public class Uncletwo extends Uncle ,Uncleone{
}
子类 多层继承
//多层继承
package edu.xcdq.demo;
/**
* @qvthor liuwenzheng
* @date 2021/4/22 17:05
*/
//多层继承
public class UncleOneSon extends UncleOne{
}
在继承中类加载的顺序
先创建父类,在创建子类
父类的构造方法先于子类构造方法的调用
public class UncleOne extends Uncle {
public UncleOne(){
super(); //调用父类的构造方法
System.out.println("子类大舅的构造方法被创建");
}
方法的复写(覆写)override
@Override
public void fahongbao(){
System.out.println("大舅穷了,红包没了");
}
如果子类没有复写父类的方法,调用的是父类的
如果复写了父类的方法,在调用是优先调用子类复写后的方法
要求:
1、方法的签名完全一致
2、方法体不同
Final
final Uncle uncle1 = new Uncle();
uncle1.setName("修改前的名字");
System.out.println(uncle1.getName());
修饰的内容不可以发生改变
修饰的是基本数据类型,其值不可以发生改变
修饰的是引用数据类型,引用的地址不能发生改变(不能指向新的空间),但原本引用的空间中的值是可以发生改变
Demo
package edu.xcdq.demo;
/**
* @qvthor liuwenzheng
* @date 2021/4/22 16:36
*/
public class Demo {
public static void main(String[] args) {
UncleOne longfei = new UncleOne();
longfei.fahongbao();
longfei.chouyan();
Uncletwo uncletwo = new Uncletwo() ;
uncletwo.fahongbao();
uncletwo.deinkWine();
final Uncle uncle1 = new Uncle();
uncle1.setName("修改前的名字");
System.out.println(uncle1.getName());
}
}
Uncle
package edu.xcdq.demo;
/**
* @qvthor liuwenzheng
* @date 2021/4/22 16:28
*/
public class Uncle {
private String name ;
private int age ;
// getter setter
public void setName (String name){
this.name = name ;
}
public String getName(){
return name ;
}
public void setAge(int age){
this.age = age ;
}
public int getAge(){
return age ;
}
// 发红包
public void fahongbao(){
System.out.println("舅舅再发红包");
}
public Uncle(){
System.out.println("父类的无参构造方法被调用,父类被创建了");
}
}
UncleOne
package edu.xcdq.demo;
import edu.xcdq.demo.Uncle;
/**
* @qvthor liuwenzheng
* @date 2021/4/22 16:33
*/
public class UncleOne extends Uncle {
public UncleOne(){
super(); //调用父类的构造方法
System.out.println("子类大舅的构造方法被创建");
}
public void chouyan(){
System.out.println("大舅喜欢抽烟");
}
@Override
public void fahongbao(){
System.out.println("大舅穷了,红包没了");
}
}
UncleTow
package edu.xcdq.demo;
import edu.xcdq.demo.Uncle;
/**
* @qvthor liuwenzheng
* @date 2021/4/22 16:34
*/
public class UncleTwo extends Uncle {
public void deinkWine(){
System.out.println("二舅喜欢喝酒");
}
}
UncleOneSon
package edu.xcdq.demo;
/**
* @qvthor liuwenzheng
* @date 2021/4/22 17:05
*/
//多层继承
public class UncleOneSon extends UncleOne{
}