java学习笔记

super关键字


1.super可以调用父类的属性,但是不能访问私有属性
2.super可以调用父类的方法,但是不能访问私有方法
3.对于任何子类构造器,如果没有用this()本类构造器会默认引用无参构造器super(),如果想调用父类的其他构造器则需要传入相应的参数
4.调用父类构造器的好处(分工明确,父类属性由父类初始化,子类属性由子类初始化)
5.如果调用super.方法名(),则是直接向上查找,不去查找本类的这个方法。
6.多个上级类则遵循就近原则

继承的原理


1.如果子类中没有这个属性或者方法会依次向上寻找,如果上级有则访问,如果是私有的或者不存在这个属性或者方法会接着向上查找,直到找到object类
2.当子类的方法属性和父类的属性方法重名的时候,为了访问父类的成员,可以通过super

方法的重写(override)


1.子类有一个方法和父类的某个方法名称,返回类型,参数一样,那么我们则说这个子类的方法覆盖了父类的方法
2.子类如果返回的参数是父类返回参数的子类,那么也构成重写

public Object fuMethod{
return null;
}
public String ziMethod{
return null;
}

这样可以(๑•̀ㅂ•́)و✧
3.子类不能缩小父类方法的访问权限,重写的时候,如果父类是public,子类不能写protected,但是子类可以扩大父类的访问权限

多态


1.方法或者对象具有多种形态,是面向对象的第三大特征,多态是建立在封装和继承之上的。通过不同的参数调用不同的重载的方法。
2.多态的规则

  1. 一个对象的编译运行和运行类型可以不一样,也可以一致
Animal animal =new dog();
  1. 编译类型在定义对象时,就确定了,不能改变
  2. 运行类型是可以变化的
  3. 编译类型看=号左边,运行看=号的右边
  4. 运行时执行的是运行类型而不是编译类型

动态绑定机制


  1. Java的动态绑定机制
  • 当调用对象方法的时候,该方法会和该对象的内存地址/运行类型绑定
  • 当调用对象属性的时候,没有动态绑定机制,哪里申明,哪里使用
  • 在向上引用的情况,如果调用方法,则是调用子类的方法,但是调用属性则是父类的属性
  • 如果子类没有那个方法就去父类方法里面查找,这时候当调用对象属性的时候则是调用父类的属性

多态数组


  1. 数组的定义类型为父类类型,里面保存的实际元素为子类类型
public class PolyArray {
  public static void main(String[] args) {
      //要求现在有一个继承结构,要求创建一个Person对象,
      //两个Student对象,两个Teacher对象,统一放到一个数组里面
      //并调用每个对象的say方法
      Person[] personArray =new Person[5];
      personArray[0]=new Person("jack",20);
      personArray[1]=new Student("jack",20,100);
      personArray[2]=new Student("smith",19,60);
      personArray[3]=new Teacher("scott",30,5000);
      personArray[4]=new Teacher("king",30,65000);
      for (int i = 0; i < personArray.length; i++) {
          System.out.println(personArray[i].say());
          //这个时候是根据运行类型调用相应的方法
      }

  }
}

2.如果想要调用子类对象的特有方法,必须使用向下转型,转换成子类的类型

package poly_.polyarr;

public class PolyArray {
    public static void main(String[] args) {
        //要求现在有一个继承结构,要求创建一个Person对象,两个Student对象,两个Teacher对象,统一放到一个数组里面
        //并调用每个对象的say方法
        Person[] personArray =new Person[5];
        personArray[0]=new Person("jack",20);
        personArray[1]=new Student("jack",20,100);
        personArray[2]=new Student("smith",19,60);
        personArray[3]=new Teacher("scott",30,5000);
        personArray[4]=new Teacher("king",30,65000);
        for (int i = 0; i < personArray.length; i++) {
            //这个时候是根据运行类型调用相应的方法
            System.out.println(personArray[i].say());
            //如果想要调用子类的特有的方法 ,判断运行类型如果是Student
            if(personArray[i] instanceof Student){
               //向下转型,转完之后就可以调用方法
                ((Student) personArray[i]).study();
            }
            if(personArray[i] instanceof Teacher){
                ((Teacher) personArray[i]).teach();
            }
        }
    }
}

多态参数


  1. 方法定义的形参类型为父类类型,实参类型允许为子类类型
package polyparameter;

import javafx.concurrent.Worker;

public class PolyParameter {
    public static void main(String[] args) {
        worker tom =new worker("tom",2500);
        manager milan = new manager("milan", 5000, 20000);
        PolyParameter a=new PolyParameter();
        a.showEmpAnnual(tom);
        a.showEmpAnnual(milan);
        a.testWork(tom);
        a.testWork(milan);
    }
    public void showEmpAnnual(Employee e){
        System.out.println(e.getAnnualSalary());
    }
    //添加一个testwork方法,如果是普通员工调用work方法,如果是经理调用manage方法
    public void testWork(Employee e){
        if(e instanceof worker){
            ((worker) e).work();
        }
        else if(e instanceof manager){
            ((manager) e).manage();
        }else {
            System.out.println("不处理");
        }
    }
}

Object类详解


equals

  1. equals方法:
  • ==是一个比较运算符
  • 既可以判断基本类型是否相等,去判断值是否相等
  • 也可以判断引用类型是否相等,去判断是否指向了同一个对象
  1. equals是object类的一个方法,只能去判断引用类型,判断两个对象是否是同一个对象。子类中往往重写了该方法, Integer和String都重写了equals方法,用于判断内容是否相等
  2. 查看源码的方法ctrl+b

hashcode

  1. 返回该对象的哈希码值
  2. 提高具有哈希结构的容器的效率,两个引用如果指向了同一个对象,那么哈希值肯定一样,如果两个引用指向了不同的对象,则哈希值是不一样的,哈希值主要是根据地址来计算,但是不能将哈希值等价为地址
  3. 实际上,hashcode方法是将该对象的内部地址转化成一个整数来实现的

toSring

  1. 返回该对象的字符串表示,默认返回包名加类名加哈希值的十六进制
  2. toString方法一般会被重写
  3. 当直接sout(对象名),默认调用对象.toString方法

断点调试


  1. 整个断点调试状态中,是运行状态,是以对象的运行类型来执行的
  2. 断点调试的快捷键
  • F7 跳入方法内
  • F8 跳过
  • shift+F8 跳出方法
  • F9 执行到下一个断点
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值