- 理解多态在编译时不确定,只有在运行时才确定
import java.util.Scanner;
public class AnimalEatTest {
public static void main(String[] args) {
AnimalEatTest animalEatTest=new AnimalEatTest();
Scanner scan=new Scanner(System.in);
System.out.print(“输入0-2”);
int index = scan.nextInt();
switch (index){
case 0:
animalEatTest.show(new dog());
//这里我们传参时不确定的,编译时并不知道结果是什么,只有当拿到输入信息才能确定是什么动物吃东西
break;
case 1:
animalEatTest.show(new cat());
break;
case 2:
animalEatTest.show(new cattle());
}
}
public void show(Animal animal){
animal.eat();
}
}
class Animal{
public void eat(){
System.out.println(“吃”);
}
}
class dog extends Animal{
public void eat(){
System.out.println(“吃骨头”);
}
}
class cat extends Animal{
public void eat(){
System.out.println(“吃鱼”);
}
}
class cattle extends Animal{
public void eat(){
System.out.println(“吃草”);
}
}
================================================================================
- 有了对象多态性后,内存中实际是加载了子类中声明的属性和方法,但由于声明的是父类类型,所以不能
必看视频!获取2024年最新Java开发全套学习资料 备注Java
调用
-
使用子类特有的属性和方法需要向下转型使用强制类型转换(跟数据类型转换相似)
-
示例:
public class PersonTest {
public static void main(String[] args) {
Person p1=new Man();
p1.eat();
//大口吃
Man m1=(Man)p1;//这里通过强制类型转换成Man类型,就可以调用man中自己定义的方法了
m1.getMoney();
//挣钱
}
}
class Person{
public void eat(){
System.out.println(“吃”);
}
}
class Man extends Person{
public void eat(){
System.out.println(“大口吃”);
}
public void getMoney(){
System.out.println(“挣钱”);
}
}
-
当类型转换时可能出现异常ClassCastException(类型转换异常),可以通过instaceof判定是否可以强转
-
语法:a instaceof A (判断对象a是否是类A的实例)
-
示例:
public class PersonTest {
public static void main(String[] args) {
Person p1=new Man();
p1.eat();
//大口吃
if(p1 istanceof Man){//这里执行判定防止出错
Man m1=(Man)p1;//这里通过强制类型转换成Man类型,就可以调用man中自己定义的方法了
m1.getMoney();
//挣钱
}
}
}
class Person{
public void eat(){
System.out.println(“吃”);
}
}
class Man extends Person{
public void eat(){
System.out.println(“大口吃”);
}
public void getMoney(){
System.out.println(“挣钱”);
}
}
============================================================================
-
Object类是所有JAVA类的根父类,当类中没有extends指明其父类时,默认为java.lang.Object类
-
Object没有属性,并只声明了一个空参构造器
-
equals()方法
-
Object类中equals()与 ==是相同的,都是比较对象地址值是否相同
-
但String,Date,File,包装类等重写了Object类中equals()方法,比较的两个对象实体内容是否相同
- 重写equals()
public class CustomerTest {
public static void main(String[] args) {
Person2 p1=new Person2(“jack”,20);
Person2 p2=new Person2(“jack”,20);
System.out.println(p1 == p2);
//false
System.out.println(p1.equals(p2));
//true
}
}
class Person2{
String name;
int age;
public Person2(String name,int age){
this.name=name;
this.age=age;
}
public boolean equals(Object object){
if(this == object){//地址是否相同
return true;
}
if(object instanceof Person2){
Person2 p2=(Person2) object;
return this.age == p2.age && this.name.equals(p2.name);
}
return false;
}
}
=============================================================================
-
当我们输出一个对象的引用时,实际上就是调用toString()方法
-
String,Date,File,包装类等重写了Object类中toString()方法,使得在调用时返回"实体内容"
-
示例:
最后,附一张自己面试前准备的脑图:
面试前一定少不了刷题,为了方便大家复习,我分享一波个人整理的面试大全宝典
- Java核心知识整理
- Spring全家桶(实战系列)
Step3:刷题
既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。
以下是我私藏的面试题库:
很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。
最后祝愿各位身体健康,顺利拿到心仪的offer!
转存中…(img-NtKpnd2a-1716456608148)]
Step3:刷题
既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。
以下是我私藏的面试题库:
[外链图片转存中…(img-It8ZdtMU-1716456608149)]
很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。
最后祝愿各位身体健康,顺利拿到心仪的offer!