Java知识查漏补缺-01

本博客的相关学习视频来源为https://www.bilibili.com/video/BV1Jt411Q7qs,b站ID:黎曼的猜想 (侵删)
java重载与重写
  • 访问权限的等级:从大到小:public > protected (主要用于继承)> 包访问权限(无关键词) > private.
  • classA中分别定义中了四个不同权限的属性和方法:
            1、同一个包下的classB只有private私有变量和方法不能调用
            2、同一个包下的classC继承了classA,也是只有private私有变量和方法不能调用
            3、不同包下的classD,只能使用public公有方法
            4、不同包下的classE继承了classA,可以使用public和protected
 
 
super关键字
  • 继承类中方法可以重写覆盖,但是子类的属性是不会被覆盖的,和父类中的ID是两个ID,在子类中调用的话是调用的子类的ID,想要调用父类的ID,就可以使用super.ID;再者,方法覆盖后也仍然可以使用super方法调用父类的方法,不然子类重写覆盖后只能调用子类的方法
  • super可以默认调用父类构造器,父类要不不写构造器,要不就必须设置空构造器,不能只设置一个含参构造器,不然子类的构造器会默认调用父类的空构造器,也就是super(),这时会报错;
  • 正是由于super的存在,每一个创建的类才可以逐级向上调用到祖先类Object类,每个类从实例化开始,就可以使用java内置的全部方法
 
 
多态性(又被称为接口重用)
  • 前提:需要存在继承或实现关系;要有方法的重写,或者实现
  • 对象的多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用):Person people=new Man(),其中Man类继承自People类,使用时仍然使用的是子类的方法,而且这样实例化的对象只能调用子类重写的方法,不能调用子类特有的方法,而也就是编译看左,运行看右
  • 多态性的意义很重要,典型举例就是数据库的连接,Connection con = new mysqlConnection(),父类创建一个对象,但是真正的实现方法却是调用子类的重写方法,这样的话,只要制定一套连接标准,由不同的数据库开发商去重写其父类的连接方法就可以了,又因为只能调用子类重写父类的方法,所以不用每个生产商去设计一中自己独有的连接接口,只是实现连接的内在逻辑就可以
  • 属性不存在多态性,不能被覆盖,多态的调用后,只会调用父类的ID,并不会调用子类的ID,与继承是相反的
  • 此时被重写的父类方法称为虚拟方法
 
 
 
对象类型转换:
 
instanceof关键字:
 
向上转型是肯定不会出错的,但是向下转型会出现精读缺失,报转型错误异常,所以在父类的强制向下转化时,要用到关键字instanceof
 
 
 
深刻理解多态性之继承成员变量和成员方法的区别
 
 
输出控制台答案:20 , 20 ,ture ,10 ,20 
 
重载和重写的区别:
从编译和运行的角度看:
        重载,是指允许存在多个同名方法,而这些方法的参数不同。编译器根据方法不同的参数表,对同名方法的名称做修饰。对于编译器而言,这些同名方法就成了不同的方法。它们的调用地址在编译期就绑定了。Java的重载是可以包括父类和子类的,即子类可以重载父类的同名不同参数的方法。所以:对于重载而言,在方法调用之前,编译器就已经确定了所要调用的方法,这称为“早绑定”或“静态绑定”;
        而对于多态,只有等到方法调用的那一刻,解释运行器才会确定所要调用的具体方法,这称为“晚绑定”或“动态绑定”。
        引用一句Bruce Eckel的话:“不要犯傻, 如果它不是晚绑定,它就不是多态。”
 
 
 
Object类的使用
 
 
 
 
==运算符和equals的区别
 
==的话,主要是判断地址是否相等
使用==首先要保证两遍的类型要一样,不然编译就会出错,更别谈比较
 
equals的话,就是区别看待了
 
重写equals方法,用来判断两个引用数据类型变量的赋值内容是否一致
 
posted @ 2020-06-26 22:19  Tsui98'  阅读(135)  评论(0编辑  收藏  举报