JAVA入门之多态 笔记(25)
·
蜂信物联FastBee平台https://gitee.com/beecue/fastbee
阿里资料开源项目https://gitee.com/vip204888
百度低代码前端框架https://gitee.com/baidu/amis
OpenHarmony开源项目https://gitcode.com/openharmony
仓颉编程语言开放项目https://gitcode.com/Cangjie
package TEXT01;
/*
测试类
*/
public class Demo {
public static void main(String[] args) {
Animal cat = new Cat();
//编译的话编译Animal,运行的话则运行Cat, 如果Cat中没有这方法, 则在Animal中找
cat.eat();
// cat.play();
//Animal对象中并无play方法,所以编译不通过,因此不能调用play方法
}
}

==============================================================================
- 成员变量:编译看左边, 执行看左边
- 成员方法:编译看左边, 执行看右边
为什么成员变量和成员方法的访问不一样呢?
- 因为成员方法有重写, 而成员变量没有
下面展示一些 猫对象代码。
package TEXT01;
public class Cat extends Animal {
public int age = 188;//定义猫的年龄
public int weight = 200;//定义猫的体重
@Override
public void eat() {
System.out.println("猫吃鱼");
}
public void play(){
System.out.println("和小狗玩");
}
}
下面展示一些 动物对象代码
package TEXT01;
public class Animal {
public int age = 40;//定义动物的年龄
public void eat(){
System.out.println("吃东西");
}
}
下面展示一些 测试类代码
package TEXT01;
/*
测试类
*/
public class Demo {
public static void main(String[] args) {
Animal cat = new Cat();
//编译的话编译Animal,运行的话则运行Cat, 如果Cat中没有这方法, 则在Animal中找
cat.eat();
// cat.play(); //Animal对象中并无play方法,所以编译不通过,因此不能调用play方法
System.out.println(cat.age);
//访问的成员变量是父类的
// System.out.println(cat.weight);
//报错,因为父类中没有weight这个成员变量
}
}

在访问成员变量中,可以看到是访问的是父类中的age,并将父类中的age输出出来,这是为什么呢?
原因是Animal cat = new Cat(); , 虽然对象是Cat类型,但是在外界看来,引用类型依然是Animal,因此访问的是Animal对象的内容
=============================================================================
-
多态的好处:提高了程序的扩展性
-
具体表现:定义方法的时候,使用父类型作为参数,将来在使用的时候,使用具体的子类型参与操作 -
多态的弊端: 不能使用子类的特有功能
package TEXT01;
/*
操作对象
*/
public class AnimalOperator {
public void usAnimal(Animal animal){
//形参引用类型用Animal 这就不用分Dog还是猫
animal.eat();
}
}
package TEXT01;
/*
动物对象
*/
public class Animal {
public void eat(){
System.out.println("吃东西");
}
}
package TEXT01;
/*
猫对象
*/
public class Cat extends Animal {
@Override
public void eat() {
System.out.println("猫吃鱼");
}
public void play(){
System.out.println("和小狗玩");
}
}
package TEXT01;
/*
狗对象
*/
public class Dog extends Animal{
@Override
public void eat() {
System.out.println("狗啃骨头");
}
}
package TEXT01;
/*
测试类
*/
public class Demo {
public static void main(String[] args) {
/*
创建动物对象
*/
Animal cat = new Cat();
Animal dog = new Dog();
//创建操作对象
AnimalOperator ao = new AnimalOperator();
ao.usAnimal(dog);//调用狗对象中的方法
ao.usAnimal(cat);//调用猫对象中的方法
}
}
# 最后
关于面试刷题也是有方法可言的,建议最好是按照专题来进行,然后由基础到高级,由浅入深来,效果会更好。当然,这些内容我也全部整理在一份pdf文档内,分成了以下几大专题:
* Java基础部分

* 算法与编程

* 数据库部分

* 流行的框架与新技术(Spring+SpringCloud+SpringCloudAlibaba)

这份面试文档当然不止这些内容,实际上像JVM、设计模式、ZK、MQ、数据结构等其他部分的面试内容均有涉及,因为文章篇幅,就不全部在这里阐述了。
**作为一名程序员,阶段性的学习是必不可少的,而且需要保持一定的持续性,这次在这个阶段内,我对一些重点的知识点进行了系统的复习,一方面巩固了自己的基础,另一方面也提升了自己的知识广度和深度。**
(img-e3MRXKRq-1725158674815)]
* 算法与编程
[外链图片转存中...(img-eTaaiHQG-1725158674816)]
* 数据库部分
[外链图片转存中...(img-CqZUwvC7-1725158674816)]
* 流行的框架与新技术(Spring+SpringCloud+SpringCloudAlibaba)
[外链图片转存中...(img-gHmISMVd-1725158674817)]
这份面试文档当然不止这些内容,实际上像JVM、设计模式、ZK、MQ、数据结构等其他部分的面试内容均有涉及,因为文章篇幅,就不全部在这里阐述了。
**作为一名程序员,阶段性的学习是必不可少的,而且需要保持一定的持续性,这次在这个阶段内,我对一些重点的知识点进行了系统的复习,一方面巩固了自己的基础,另一方面也提升了自己的知识广度和深度。**
更多推荐



所有评论(0)