新手小白学JAVA 面向对象之多态


创建包: cn.tedu.oop

创建类: TestDemo.java

package cn.tedu.oop2;

/本类用作多态的入门案例/

public class TestDemo {

public static void main(String[] args) {

//6.创建“纯纯的”对象用于测试

Animal a = new Animal();

Cat c = new Cat();

Dog d = new Dog();

a.eat();//小动物Animal吃啥都行~调用的是父类自己的功能

c.eat();//小猫爱吃小鱼干~调用的是子类重写后的功能

d.eat();//小狗爱吃肉骨头~调用的是子类重写后的功能

/2.父类对象不可以使用子类的特有功能/

//a.jump();//报错,Animal类里并没有这个方法

//a.run();//报错,Animal类里并没有这个方法

c.jump();//小猫Cat跳的老高啦~,子类可以调用自己的功能

d.run();//小狗Dog跑的老快啦~,子类可以调用自己的功能

//7.创建多态对象进行测试

/*3.口诀1:父类引用指向子类对象

  • 解释:创建出来的子类对象的地址值,交给父类类型的引用类型变量来保存*/

Animal a2 = new Cat();//Cat类对象的地址值交给父类型变量a2来保存

Animal a3 = new Dog();//Dog类对象的地址值交给父类型变量a3来保存

//8.测试多态对象

/*4.口诀2:编译看左边,运行看右边

  • 解释:必须要在父类定义这个方法,才能通过编译,把多态对象看作是父类类型

  •  必须要在子类重写这个方法,才能满足多态,实际干活的是子类*/
    

a2.eat();//小猫爱吃小鱼干~,多态对象使用的是父类的定义,子类的方法体

}

}

/1.多态的前提:继承+重写/

//1.创建父类

class Animal{

//3.创建父类的普通方法

public void eat(){

System.out.println(“小动物Animal吃啥都行~”);

}

}

//2.1创建子类1

class Cat extends Animal{

//4.1添加重写的方法

public void eat(){

System.out.println(“小猫爱吃小鱼干~”);

}

//5.1添加子类的特有功能

public void jump(){

System.out.println(“小猫Cat跳的老高啦~”);

}

}

//2.2创建子类2

class Dog extends Animal{

//4.2添加重写的方法

@Override

public void eat(){

System.out.println(“小狗爱吃肉骨头~”);

}

//5.2添加子类的特有功能

public void run(){

System.out.println(“小狗Dog跑的老快啦~”);

}

}

4. 多态的好处


  1. 多态可以让我们不用关心某个对象到底具体是什么类型,就可以使用该对象的某些方法

  2. 提高了程序的可扩展性和可维护性

5. 多态的使用


前提:多态对象把自己看做是父类类型

  1. 成员变量: 使用的是父类的

  2. 成员方法: 由于存在重写现象,所以使用的是子类的

  3. 静态成员: 随着类的加载而加载,谁调用就返回谁的

6. 练习:多态成员使用测试


创建包: cn.tedu.oop

创建类: TestDemo2.java

package cn.tedu.oop2;

/本类用于测试多态成员的使用情况/

public class TestDemo2 {

public static void main(String[] args) {

//7.创建纯纯的子类对象

Dog2 d = new Dog2();

System.out.println(d.sum);//20,子类自己的属性

d.eat();//小狗爱吃肉包子,子类自己的方法

//8.创建多态对象

/口诀1:父类引用指向子类对象/

/口诀2:编译(保存)看左边,运行(效果)看右边/

Animal2 a = new Dog2();

/多态中,成员变量使用的是父类的/

System.out.println(a.sum);//10

/多态中,方法的声明使用的是父类的,方法体使用的是子类的/

a.eat();//小狗爱吃肉包子

/*多态中,调用的静态方法是父类的,因为多态对象把自己看作是父类类型

  • 直接使用父类中的静态资源*/

a.play();//没有提示,玩啥都行~

Animal2.play();

}

}

//1.创建父类

class Animal2{

//3.创建父类的成员变量

int sum = 10;

//4.创建父类的普通方法

public void eat(){

System.out.println(“吃啥都行~”);

}

//9.1定义父类的静态方法play

public static void play(){

System.out.println(“玩啥都行~”);

}

}

//2.创建子类

class Dog2 extends Animal2{

//5.定义子类的成员变量

int sum = 20;

//6.重写父类的方法

@Override

public void eat(){

System.out.println(“小狗爱吃肉包子”);

}

//9.2创建子类的静态方法play

//@Override

/*这不是一个重写的方法,只是恰巧在两个类中出现了一模一样的两个静态方法

  • 静态方法属于类资源,只有一份,不存在重写的现象

  • 在哪个类里定义,就作为哪个类的资源使用*/

public static void play(){

System.out.println(“小狗喜欢玩皮球~”);

}

}

7 拓展


7.1 设计汽车综合案例

创建包: cn.tedu.oopexec

创建类: DesignCar.java

package cn.tedu.oop2;

/本类用于完成汽车设计案例/

public class DesignCar {

public static void main(String[] args) {

//9.创建一个纯纯的父类对象进行测试

Car c = new Car();

System.out.println(c.getColor());//null

c.start();

c.stop();

//c.swim();//报错,父类对象不可以调用子类的特有功能

//10.创建纯纯的子类对象做测试

BMW b = new BMW();

System.out.println(b.color);//五彩斑斓的黑

System.out.println(b.getColor());//null

b.start();//都让开,我的车要起飞啦~

b.stop();//唉呀妈呀熄火了~

//11.创建多态对象进行测试

Car c2 = new TSL();

//System.out.println(c2.color);

System.out.println(c2.getColor());

c2.stop();

c2.start();

//c2.swim();

}

}

//1.通过分析,抽象形成一个汽车类

class Car{

//2.定义并封装汽车类的属性–成员变量

private String brand;//品牌

private String color;//颜色

private int id;//编号

private double price;//价格

//3.定义功能

public void start(){

System.out.println(“我的小车车启动啦~”);

}

public void stop(){

System.out.println(“唉呀妈呀熄火了~”);

}

public String getBrand() {

return brand;

}

public void setBrand(String brand) {

this.brand = brand;

}

public String getColor() {

return color;

}

public void setColor(String color) {

this.color = color;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public double getPrice() {

return price;

}

public void setPrice(double price) {

this.price = price;

}

}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

总结

在清楚了各个大厂的面试重点之后,就能很好的提高你刷题以及面试准备的效率,接下来小编也为大家准备了最新的互联网大厂资料。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

img

总结

在清楚了各个大厂的面试重点之后,就能很好的提高你刷题以及面试准备的效率,接下来小编也为大家准备了最新的互联网大厂资料。

[外链图片转存中…(img-xMlXxflM-1713727579181)]

[外链图片转存中…(img-mcFWtVcV-1713727579182)]

[外链图片转存中…(img-ly5z9IZW-1713727579182)]

[外链图片转存中…(img-PMJUZtmf-1713727579182)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值