Java最全Java Review (十一、面向对象----多态),深入浅出Java性能调优

一线互联网大厂Java核心面试题库

image

正逢面试跳槽季,给大家整理了大厂问到的一些面试真题,由于文章长度限制,只给大家展示了部分题目,更多Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等已整理上传,感兴趣的朋友可以看看支持一波!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 多态性

  • 引用变量的强制类型转换

  • instanceof 运算符

  • 多态实现方式

多态是同一个行为具有多个不同表现形式或形态的能力。

多态性

=====================================================================

Java 引用变量有两个类型 :一个是编译时类型,一个是运行时类型,编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定,如果编译时类型和运行时类型不一致,就可能出现所谓的多态(Polymorphism)

多态实例

class BaseClass {

public int book = 6;

public void base() {

System.out.println(“父类的普通方法”);

}

public void test() {

System.out.println(“父类的被覆盖的方法”);

}

}

public class SubClass extends BaseClass {

// 重新定义一个 book 实例变量隐藏父类 book 实例变量

public String book = "子类书籍 ";

public void test() {

System.out.println(" 子类的覆盖父类的方法");

}

public void sub() {

System.out.println("子类的普通方法 ");

}

public static void main(String[] args) {

// 下面编译时类型和运行时类型完全一样 因此不存在多态

BaseClass bc = new BaseClass();

// 输出

System.out.println(bc.book);

// 下面两次调用将执行 BaseClass的方法

bc.base();

bc.test();

// 下面编译时类型和运行时类型完全 样,因此不存在多态

SubClass sc = new SubClass();

// 输出 轻量级 Java EE 企业应用实战"

System.out.println(sc.book);

// 下面调用将执行从父类继承到的 base ()方法

sc.base();

// 下面调用将执行当前类的 test ()方法

sc.test();

// 下面编译时类型和运行时类型不 样,多态发生

BaseClass ploymophicBc = new SubClass();

// 输出表明访问的是父类对象的实例变量

System.out.println(ploymophicBc.book);

// 下面调用将执行从父类继承到的 base ()方法

ploymophicBc.base();

// 下面调用将执行当前类的 test ()方法

ploymophicBc.test();

// 因为 ploymophicBC 的编译时类型是 BaseClass

// BaseClass 类没有提供 sub ()方法,所以下面代码编译时会出现错误

// plonophicBc.sub()

}

}

结果:

6

父类的普通方法

父类的被覆盖的方法

子类书籍

父类的普通方法

子类的覆盖父类的方法

6

父类的普通方法

子类的覆盖父类的方法

  • 父类引用指向子类对象时,多态发生了

引用变量在编译阶段只能调用其编译时类型所具有的方法,但运行时则执行它运行时类型所具有的方法 。因此,编写 Java 代码时,引用变量只能调用声明该变量时所用类里包含的方法。 例如,通过 Object p = new Person()代码定义一个变量 ,则这个变量只能调用Object 类的方法,而不能调用 Person 类里定义的方法

引用变量的强制类型转换

=============================================================================

编写Java程序时,引用变量只能调用它编译时类型的方法,而不能调用它运行时类型的方法,即使它实际所引用的对象确实包含该方法。如果需要让这个引用变量调用它运行时类型的方法,则必须把 它强制类型转换成运行时类型,强制类型转换需要借助于类型转换运算符。

类型转换运算符是小括号,类型转换运算符的用法是:(type)variable,这种用法可以将variable变量转换成一个type类型的变量。类型转换运算符可以将一个基本类型变量转换成另一个类型。

除此之外,这个类型转换运算符还可以将一个引用类型变量转换成其子类类型。这种强制类型转换不是万能的,当进行强制类型转换时需要注意:

  • 基本类型之间的转换只能在数值类型之间进行,这里所说的数值类型包括整数型、字符型和浮 点型。但数值类型和布尔类型之间不能进行类型转换。

  • 引用类型之间的转换只能在具有继承关系的两个类型之间进行,如果是两个没有任何继承关系 的类型,则无法进行类型转换,否则编译时就会出现错误。如果试图把一个父类实例转换成子 类类型,则这个对象必须实际上是子类实例才行(即编译时类型为父类类型,而运行时类型是子类类型),否则将在运行时引发ClassCastException异常。

下面是进行强制类型转换的示范程序。下面程序详细说明了哪些情况可以进行类型转换,哪些情况不可以进行类型转换。

引用类型强制转换实例

public class ConversionTest {

public static void main(String[] args) {

double d = 13.4;

long l = (long) d;

System.out.println(l);

总结

其他的内容都可以按照路线图里面整理出来的知识点逐一去熟悉,学习,消化,不建议你去看书学习,最好是多看一些视频,把不懂地方反复看,学习了一节视频内容第二天一定要去复习,并总结成思维导图,形成树状知识网络结构,方便日后复习。

这里还有一份很不错的《Java基础核心总结笔记》,特意跟大家分享出来

目录:

部分内容截图:

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

5305727332)]

[外链图片转存中…(img-YBnofu3w-1715305727333)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 12
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值