学习java的第10天

01. 继承中的成员方法的关系

  • 代码实现

    • father1.java

      /**
       * 父类
       * @author 海锋
       *
       */
      public class Father01 {
      	public void show() {
      		System.out.println("father show");
      	}
      
      }
      
    • son1.java

      /**
       * 子类
       * @author 海锋
       *
       */
      public class Son1 extends Father01{
      	public void show() {
      		System.out.println("son show");
      	}
      
      }
      
    • Demo01_Inherit.java

      /**
       * 继承中成员方法的关系
       * @author 海锋
       *
       */
      public class Demo01_Inherit {
      	public static void main(String[] args) {
      		Son1 son = new Son1();
      		son.show();
      		
      		Father1 son1  = new Son1();
      		son1.show();
      		
      		
      	}
      	
      }
      
  • 内存图解

    image-20200713095829496

02. super关键字

  • this关键字

    • 当前对象的引用
  • super关键字

    • 当前对象的父类引用
  • 代码实现

    • Son02.java

    • public class Son02 extends Father02{
      	
      	
      	String name = "sonName";
      	
      	public void show() {
      		System.out.println("son show");
      	}
      	
      	
      	/**
      	 * 调用当前对象的父类中的show方法
      	 */
      	public void showFather() {
      		super.show();
      	}
      	
      	/**
      	 * 调用当前对象的父类中的name属性
      	 */
      	public void fatherName() {
      		System.out.println(super.name);
      	}
      	
      
      }
      
    • 测试代码

      Son02 clazz = new Son02();
      System.out.println(clazz.name);
      clazz.show();
      
      clazz.showFather();
      clazz.fatherName();
      
  • this和super的区别

    • this和super分别代表什么
      • this代表当前对象的引用
      • super代表当前对象的父类引用
    • this和super的使用
      • 成员变量
        • this既可以调用子类的成员变量,也可以调用父类的成员变量
        • super只能调用父类的成员变量
      • 成员方法
        • this既可以调用子类的成员方法,也可以调用父类的成员方法
        • super只能调用父类的成员方法
      • 构造器
        • this(…)调用本类的构造器
        • super(…)调用父类的构造器

03. 继承中构造方法的关系

  • 概述

    • 子类不会继承父类的构造器,所有子类需要自己定义构造器
    • 子类构造器会默认访问父类的无参构造器,原因是子类对象可能调用父类的成员变量,那就必须对父类的成员变量进行初始化,需要使用父类的无参构造器
  • 代码实现

    • Father03.java

      public class Father03 {
      	
      	private String name;
      	private int age;
      	public FatherClass03() {
      		System.out.println("父类无参构造器");
      	}
      	public FatherClass03(String name, int age) {
      		System.out.println("父类有参构造器");
      		this.name = name;
      		this.age = age;
      	}
      	public String getName() {
      		return name;
      	}
      	public void setName(String name) {
      		this.name = name;
      	}
      	public int getAge() {
      		return age;
      	}
      	public void setAge(int age) {
      		this.age = age;
      	}
      
      }
      
    • Son03.java

      public class Son03 extends Father03{
      	
      	public SonClass03() {
      		//调用父类无参构造器
      //		super();
      		System.out.println("子类无参构造器");
      	}
      	
      	public SonClass03(String name,int age) {
      		//调用父类的有参构造器
      //		super();
      		super(name,age);
      		System.out.println("子类有构造器");
      		
      	}
      
      }
      
    • 测试代码

    Son03 clazz01 = new Son03();
    System.out.println(clazz01.getName());
    System.out.println(clazz01.getAge());
    System.out.println("----------");
    
    Son03 clazz02 = new Son03("张三",18);
    System.out.println(clazz02.getName());//null
    System.out.println(clazz02.getAge());//0
    
  • 注意事项

    • 子父类关系中,父类中必须要有无参构造器,否则报错!原因是子类会默认调父类的无参构造器

04. 方法重写

  • 概述
    • 子父类中,有相同的方法
  • 分类
    • 子类中需要父类的功能
    • 子类中不需要父类的功能、
  • 方法重写的注意事项
    • 注意事项
      • 父类的私有方法无法重写
      • 方法重写时,方法的权限修饰符不能更小,建议保持一致

05. final关键字

  • 概述
    • final在java是关键字,可以声明成员变量、方法、类以及局部变量
  • 总结
    • final修饰类
      • 修饰类,类不能被继承
    • final修饰成员方法
      • 该方法不能被重写,但是能被继承
    • final修饰成员变量
      • 该变量就是一个成员变量
    • final修饰局部变量
      • 该变量就是一个局部变量
  • 书写规范
    • 如果是一个单词,全部都大写
    • 如果是多个单词,全部都大写,且单词之间用下划线隔开

06. 常量的初始化时机

  • 初始化时机
    • 常量需要在对象创建之前赋初值
  • 对象创建之前的场景
    • 静态代码块
    • 构造代码块
    • 构造器
  • 总结
    • 推荐在静态代码块对常量进行赋初值,常量的初值越早越好

07. 多态

  • 概述

    • 事物存在多种形态
  • 多态前提

    • 子父类关系
    • 需要有方法重写
  • 语法

    • 父类引用指向子类对象

      父类名 对象名 = new 子类名();
      
  • 代码实现

    MyCat cat1 = new MyCat();
    cat1.eat();
    
    System.out.println("-------------");
    //父类引用指向子类对象
    MyAnimal cat2 = new MyCat();
    cat2.eat();
    
  • 多态访问成员变量

    • 总结
      • 编译看左边,运行看左边
      • 遵从静态绑定
        • 静态绑定是在编译时就已经确定该使用哪个哪个变量或调用哪个方法
  • 多态访问成员方法

    • 总结

      • 编译看左边,运行看右边

      • 动态绑定

 MyCat cat1 = new MyCat();
 cat1.eat();
 
 System.out.println("-------------");
 //父类引用指向子类对象
 MyAnimal cat2 = new MyCat();
 cat2.eat();
  • 多态访问成员变量

    • 总结
      • 编译看左边,运行看左边
      • 遵从静态绑定
        • 静态绑定是在编译时就已经确定该使用哪个哪个变量或调用哪个方法
  • 多态访问成员方法

    • 总结

      • 编译看左边,运行看右边

      • 动态绑定

        • 需要等对象创建出来,使用时根据堆中的实例对象的类型才执行的就是动态绑定
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值