面向对象中

Java中关于 继承性的一些规定

一个类可以被多个子类继承,一个子类只能继承一个父类
子类父类是相对的概念,可以多层继承
子类直接继承的父类称为直接父类,间接继承的父类称为间接父类
继承直接父类后,子类拥有直接父类和间接父类的属性和方法
如果没有显示的声明一个类的父类的话,那么他就继承与java.lang.Object类
所有的类都直接间接继承java.lang.Object类

debug

在这里插入图片描述

重写

**定义:在子类中可以根据需要对从父类中继承来的方法进行改造,也称
为方法的重置、覆盖。在程序执行时,子类的方法将覆盖父类的方法。
要求

  1. 子类重写的方法必须和父类被重写的方法具有相同的方法名称、参数列表
  2. 子类重写的方法的返回值类型不能大于父类被重写的方法的返回值类型
  3. 子类重写的方法使用的访问权限不能小于父类被重写的方法的访问权限
    子类不能重写父类中声明为private权限的方法
  4. 子类方法抛出的异常不能大于父类被重写方法的异常
    注意:
    子类与父类中同名同参数的方法必须同时声明为非static的(即为重写),或者同时声明为
    static的(不是重写)。因为static方法是属于类的,子类无法覆盖父类的方法。

关键字—super

在Java类中使用super来调用父类中的指定操作:
super可用于访问父类中定义的属性
super可用于调用父类中定义的成员方法
super可用于在子类构造器中调用父类的构造器 注意:
尤其当子父类出现同名成员时,可以用super表明调用的是父类中的成员
super的追溯不仅限于直接父类 super和this的用法相像,this代表本类对象的引用,super代表父类的内存空间的标识
super调用父类的构造器

子类中所有的构造器默认都会访问父类中空参数的构造器  当父类中没有空参数的构造器时,子类的构造器必须通过this(参
数列表)或者super(参数列表)语句指定调用本类或者父类中相应的
构造器。同时,只能”二选一”,且必须放在构造器的首行 如果子类构造器中既未显式调用父类或本类的构造器,且父类中又
没有无参的构造器,则编译出错
在这里插入图片描述

多态性

作用提高代码通用性,常用作接口的重用
前提:1.继承关系 2.子类对父类方法的重写
对象的多态性:父类的引用指向子类的对象
eg; Person per=new Man();//man是person的子类
可以直接应用在抽象类和接口上
Java引用变量有两个类型:编译时类型和运行时类型。编译时类型由声明
该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。
简称:编译时,看左边;运行时,看右边。
若编译时类型和运行时类型不一致,就出现了对象的多态性(Polymorphism)
多态情况下,“看左边”:看的是父类的引用(父类中不具备子类特有的方法) “**看右边”:看的是子类的对象(**实际运行的是子类重写父类的方法)

对象的多态 —在Java中,子类的对象可以替代父类的对象使用
一个变量只能有一种确定的数据类型
一个引用类型变量可能指向(引用)多种不同类型的对象
Person p = new Student();
Object o = new Person();//Object类型的变量o,指向Person类型的对象
o = new Student(); //Object类型的变量o,指向Student类型的对象
子类可看做是特殊的父类,所以父类类型的引用可以指向子类的对象:向
上转型(upcasting)

一个引用类型变量如果声明为父类的类型,但实际引用的是子类
对象,那么该变量就不能再访问子类中添加的属性和方法
Student m = new Student();
m.school = “pku”; //合法,Student类有school成员变量
Person e = new Student();
e.school = “pku”; //非法,Person类没有school成员变量
属性是在编译时确定的,编译时e为Person类型,没有school成员变量,因而编
译错误

虚拟方法调用(Virtual Method Invocation)

  1. 正常的方法调用

Person e = new Person();
e.getInfo();
Student e = new Student();
e.getInfo();
 虚拟方法调用(多态情况下) 子类中定义了与父类同名同参数的方法,在多态情况下,将此时父类的方法称为虚拟方法,父类根据赋给它的不同子类对象,动态调用属于子类的该方法。这样的方法调用在编译期是无法确定的。
Person e = new Student();
e.getInfo(); //调用Student类的getInfo()方法
 编译时类型和运行时类型
编译时e为Person类型,而方法的调用是在运行时确定的,所以调用的是Student类 的getInfo()方法。——动态绑定

多态性小结

 多态作用:
 提高了代码的通用性,常称作接口重用
** 前提: 需要存在继承或者实现关系
 有方法的重写
成员方法:
 编译时:要查看引用变量所声明的类中是否有所调用的方法。
 运行时:调用实际new的对象所属的类中的重写方法。
** 成员变量:

 不具备多态性,只看引用变量所声明的类

继承成员变量和继承方法的区别

在这里插入图片描述

在这里插入图片描述
子类继承父类
若子类重写了父类方法,就意味着子类里定义的方法彻底覆盖了父类里的
同名方法,系统将不可能把父类里的方法转移到子类中。
对于实例变量则不存在这样的现象,即使子类里定义了与父类完全相同的
实例变量,这个实例变量依然不可能覆盖父类中定义的实例变量

object类的使用

 Object类是所有Java类的根父类,因此object中的方法在所有类中都可以继承
 如果在类的声明中未使用extends关键字指明其父类,则默认父类 为java.lang.Object类
在这里插入图片描述

==操作符和equals方法

= =:
基本类型比较值:只要两个变量的值相等,即为true。
引用类型比较引用地址(是否指向同一个对象):只有指向同一个对象时,才返回true
Person p1=new Person();
Person p2=new Person();
if (p1
p2){…}
用“”进行比较时,符号两边的数据类型必须兼容(可自动转换的基本
数据类型除外),否则编译出错
equals():
所有类都继承了Object,也就获得了equals()方法。还可以重写。 只能比较引用类型,其作用与“
”相同,比较是否指向同一个对象。 格式:obj1.equals(obj2)  特例:当用equals()方法进行比较时,对类File、String、Date及包装类(Wrapper Class)来说,是比较类型及内容而不考虑引用的是否是同一个对象;
原因:在这些类中重写了Object类的equals()方法。
当自定义使用equals()时,可以重写。用于比较两个对象的“内容”是否都相等
面试题:==和equals的区别
1 == 既可以比较基本类型也可以比较引用类型。对于基本类型就是比较值,对于引用类型
就是比较内存地址,equals比较的是引用类型的数据
2 equals的话,它是属于java.lang.Object类里面的方法,如果该方法没有被重写过默认也
是==;我们可以看到String等类的equals方法是被重写过的,而且String类在日常开发中
用的比较多,久而久之,形成了equals是比较值的错误观点。
3 具体要看自定义类里有没有重写Object的equals方法来判断。
4 通常情况下,重写equals方法,会比较类中的相应属性是否都相等。

基本类型、包装类与String类间的转换

1.java1.5以后,包装类和基本数据类型已经可以自动转换
2.基本数据类型换string可以用string类的valuerof()方法
2.string类型换包装类可以调用包装类的prasexxx(string)方法
在这里插入图片描述

面试题

在这里插入图片描述
不同,对于三元运算符,后面的冒号左右的类型会自动转化为两者最高的,本题中转化为double类型,所以本来o1应该是1,因为是double类型,变成了1.0

在这里插入图片描述第一个输出为false,==比较的是引用变量的地址,新建了两个integer对象,所以不一样
第二个输出为true,java中有个integercash类,里面存的一个integer类的数组缓存,当自动装箱时,是直接将缓存中的类的地址传给创建的integer引用变量。
第三个是false,cash中存的是-128-127,128不在范围中,所以自动装箱也是新建integer对象,所以地址不同

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值