最新Surpass Day9——Java 多态、final关键字、常量、package,java面试刷题网站

写在最后

还有一份JAVA核心知识点整理(PDF):JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算…

image

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

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

4、package

5、import

6、访问控制权限修饰符


1、多态

====

1.1 关于java语言中多态语言机制:


1)Animal、Cat、Bird三个类之间的关系:

Cat继承Animal; Bird继承Animal; Cat和Bird之间没有任何继承关系;

2)向上转型(upcasting) 子类型——>父类型(自动转换)

  • 编译通过,运行一定可以

向下转型(downcasting) 父类型——>子类型(强制类型转换)【需要加强制类型转换符】

  • 编译通过,运行不一定通过,存在隐患

3)无论是向上转型还是向下转型,两者必须要有继承关系;

public class helloworld {

public static void main(String[] args) {

Animal a = new Animal();

a.move();

Bird b = new Bird();

b.move();

Animal a2 = new Bird();//1.1.1关于该语句的解读

a2.move();

//a2.eat(); //1.1.2关于该语句的解读

Bird c2 = (Bird)a2;

c2.eat();

Animal a3 = new Cat();

Bird c3 = (Bird)a3;//1.1.3关于该语句的解读

}

}

class Animal {

public void move() {

System.out.println(“动物会跑”);

}

}

class Bird extends Animal {

//重写父类中继承的方法

public void move() {

System.out.println(“鸟会跑”);

}

//这个方法不是从父类中继承过来的,是子类中特有的行为

public void eat() {

System.out.println(“鸟吃虫”);

}

}

1.1.1 关于Animal a2 = new Bird();

1)java程序分为编译阶段和运行阶段,编译不通过,是根本无法运行的

2)编译阶段,编译器检查a2这个引用的数据类型为Animal,由于Animal.class字节码文件当中有move()方法,所以编译通过了。这个过程我们称为静态绑定,编译阶段绑定,只有静态绑定成功之后才有后续的运行;

3)程序运行阶段,JVM堆内存当中真实创建的对象是Bird对象,那么以下程序在运行阶段一定会调用Bird对象的move方法,此时发生程序的动态绑定,运行阶段绑定;

4)无论是Bird类有没有重写move方法,运行阶段一定调用的是Bird对象的move方法,因为底层真实的对象就是Bird对象

5)父类型引用指向子类型对象这种机制导致程序存在编译阶段绑定运行阶段绑定的两种不同形态这种机制可以成为一种多态语法机制;

1.1.2 关于a2.eat();

1)不能调用的原因: 因为编译阶段编译器检查到a2的类型是Animal类型,从Animal.class字节码文件当中查找eat()方法,最终没有找到该方法,导致静态绑定失败,没有绑定成功,也就是编译失败,别谈运行了;

2)如何调用a2.eat?

a2是无法直接调用的,因为a2的类型的Animal,Animal中没有eat()方法,想要调用,必须将a2强制转换成Bird类型,a2的类型是animal(父类),转换成BIrd类型(子类),需要向下转型,被称为向下转型(强制类型转换),需要加强制类型转换符;

向下转型的使用时刻:

当父类中没有子类的特有的方法,必须使用向下转型

1.1.3 关于Bird c3 = (Bird)a3;

1)编译是没有问题的,因为编译器检查到a3的数据类型是Animal,Animal和Bird之间存在继承关系,并且Animal是父类型,Bird是子类型,父类型转换成子类型叫做向下转型,语法合格;

2)程序虽然通过了,但是程序在运行阶段会出现异常,因为JVM堆内存当中真实存在的对象是Cat类型,Cat类型无法转换成Bird对象,两种对象之间不存在继承关系,此时出现了著名的异常java.lang.classCatexception,类型转换异常,这种异常总是在"向下转型"的时候发生;

1.2 instanceof


使用instanceof可以避免向下转型出现的java.lang.classCatexception

1)语法格式:

(引用 instanceof 数据类型名)

2)运算符的执行结果是布尔类型,结果可能是true/false

3)关于运算结果(true/false)

假设:(a instanceof Animal)//a的实例化是动物吗?

true表示 a这个引用指向的对象是Animal类型

false表示 a这个引用指向的对象不是Animal类型

if(a3 instanceof Cat){

Cat c3 = (Cat)a3;

c3.catchMouse();

}eles if(a3 instanceof Bird){

Bird b2 = (Bird)a3;

}

1.3 多态语法的作用


1)降低程序的耦合度,提高程序的扩展力

2)能使用多态尽量使用多态

3)父类型引用指向子类型对象

public class helloworld {

public static void main(String[] args) {

Master zhangsan = new Master();

// Cat tom = new Cat();

// Dog amy = new Dog();

// zhangsan.feed(tom);

// zhangsan.feed(amy);

zhangsan.feed(new Cat());//上面四行代码和这两行实现的功能相同

zhangsan.feed(new Dog());

//new 具体宠物对象的形参传到Pet pet中

//相当于Pet pet = new Dog();

}

}

class Master {

public void feed(Pet pet) {//Pet pet是一个父类型的引用

pet.eat();

}

}

class Cat extends Pet{

public void eat() {

System.out.println(“猫吃鱼!”);

}

}

class Dog extends Pet{

复习的面试资料

这些面试全部出自大厂面试真题和面试合集当中,小编已经为大家整理完毕(PDF版)

  • 第一部分:Java基础-中级-高级

image

  • 第二部分:开源框架(SSM:Spring+SpringMVC+MyBatis)

image

  • 第三部分:性能调优(JVM+MySQL+Tomcat)

image

  • 第四部分:分布式(限流:ZK+Nginx;缓存:Redis+MongoDB+Memcached;通讯:MQ+kafka)

image

  • 第五部分:微服务(SpringBoot+SpringCloud+Dubbo)

image

  • 第六部分:其他:并发编程+设计模式+数据结构与算法+网络

image

进阶学习笔记pdf

  • Java架构进阶之架构筑基篇(Java基础+并发编程+JVM+MySQL+Tomcat+网络+数据结构与算法

image

  • Java架构进阶之开源框架篇(设计模式+Spring+SpringMVC+MyBatis

image

image

image

  • Java架构进阶之分布式架构篇 (限流(ZK/Nginx)+缓存(Redis/MongoDB/Memcached)+通讯(MQ/kafka)

image

image

image

  • Java架构进阶之微服务架构篇(RPC+SpringBoot+SpringCloud+Dubbo+K8s)

image

image

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

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

qBTy4-1715650995094)]

  • Java架构进阶之微服务架构篇(RPC+SpringBoot+SpringCloud+Dubbo+K8s)

[外链图片转存中…(img-8fzDFxcu-1715650995094)]

[外链图片转存中…(img-dDv5H9xa-1715650995095)]

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值