百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 文章教程 > 正文

初识Java—(十九)多态的示例

xsobi 2025-01-03 19:37 1 浏览

5.7.3.1 新旧车案例

我们用一个例子来总结解释一下多态情况下里对于变量与方法的调用问题。

车行里我们有一辆BmwX5车。

public class BmwX5{
public int price = 500000;
public void speed(){
System.out.println(“150KM/H”);
}
}
我们这里还有一辆二手的X5;
public class BmwX5_1 extends BmwX5{
public int price = 200000;
public void speed(){
System.out.println(“120KM/H”);
}
}


有人来买车,新车没了,只有一辆二手的在这。然后开着出去试驾了,工作人员说这是新车。

BmwX5 bmw = new BmwX5_1(); // 这叫向上转型

人问了,你这家多钱?

System.out.println(bmw.price); // 你说应该说这车多少钱? 成员变量是事物的外物描述

然后,买车的人一脚油门下去。

bmw.speed(); // 最大能开多快?? 成员方法是事物的具体功能

你赶紧拦着,说这边限速,只开到了90KM/H.

然后试驾的回去了。来了个人说买二手车。现在这个车,是二手车,还是新车?

BmwX5_1 bmw1 = (BmwX5_1)bmw; //向下转型
System.out.println(bmw1.price);
bmw1.speed();

5.7.3.2多态继承中的内存图解

class Car{
public String price = “10”;
public void print(){
System.out.println(“我就是辆车!”);
}
}

class BmwCar extends Car{
public String price = “55”;
public void print(){
System.out.println(“我是宝马车”);
}
public void price(){
System.out.println(“这个车有点贵”);
}
}

class TestDemo{
public static void main(String[] args){
Car car = new BmwCar();
System.out.println(car.price);
car.price();
car.print();
}
}



5.7.3.3多态中的对象变化内存图解

class Car{
public void print(){}
}

class BmwCar extends Car{
public void print(){}
public void price(){}
}
class BenzCar extends Car {
public void print(){};
public void speed(){}
}

class CarDemo{
public static void main(String[] args){
Car c = new Bmwcar();
c.print();
c.price();

BmwCar bmw = (BmwCar)c;
bmw.print();
bmw.price();

c = new BenzCar();
c.print();
c.speed();

BenzCar benz = (BenzCar)c;
benz.print();
benz.speed();

BmwCar bmw1 = (Benz)c;
}
}

画图之前,先看一下。代码哪里会出错误。



5.7.3.4多态需要注意的地方及练习:

例 1:

class Car{} class BmwCar extends Car{} class BenzCar extends Car{}
class CarDemo{
BmwCar bmw = new Car(); 错 从语法定义来看,车叫宝马。行吗? 报错,不兼容类型
BmwCar bmw1 = new BenzCar(); 错 从语法定义来看,奔驰是宝马。报错,不兼容类型
}

例 2:看下面程序有没有问题,如果没有问题,结果是多少?

class Car {
public void print() {
System.out.println("I’m Car ");
}
}

class BmwCar extends Car {
public void print() {
System.out.println("I’m BmwCar");
}
public void price() {
System.out.println("500000");
}
}

class TestDemo {
public static void main(String[] args) {
Car c = new BmwCar();
c.print();
c.price();
}
}

例 3:

class A {
public void show() {
show2();
}
public void show2() {
System.out.println("A");
}
}
class B extends A {
public void show2() {
System.out.println("B");
}
}
class C extends B {
public void show() {
super.show();
}
public void show2() {
System.out.println("C");
}
}

public class TestDemo {
public static void main(String[] args) {
A a = new B();
a.show();
B b = new C();
b.show();
}
}

OK,这里总合一下。

多态成员访问特点:成员变量:编译运行都看左边。方法:编译看左边,运行看右边。

继承:子类中有和父类一样的方法,是重写。子类中没有出现父类中的方法,也继承了过来。

5.7.4 instanceof运算符

instanceof运算符的前一个操作数通常是一个引用类型变量,后一个操作数通常是一个类(也可以是接口,接口也是类,是一种特殊的类),它用于判断前面引用变量所指向的具体对象是否是后面这个类,或者后面这个类的子类,或者后面这个类的实现类的一个实例对象。是则返回ture,否则返回false。

举例1:

package com.langsin.test;
public class Test {
public static void main(String[] args) {
Object obj = "hello";
System.out.println(obj instanceof Object);
//true
System.out.println(obj instanceof String);
//true
System.out.println(obj instanceof Math);
//false
String a = "hello";
//编译失败报错:Incompatible conditional operand types String and Math(不相容的条件和数学操作数类型字符串)
System.out.println(a instanceof Math);
}
}

相关推荐

听说你还不知道Java代码是怎么运行的?

作者:Jay_huaxiao前言作为一名Java程序员,我们需要知道Java代码是怎么运行的。最近复习了深入理解Java虚拟机这本书,做了一下笔记,希望对大家有帮助,如果有不正确的地方,欢迎提出,感激...

如何开始学习JAVA编程?

#记录我的9月生活#...

java后端开发需要学什么?

Java属于后端开发中最常见的语言之一,Java这种语言的体系比较中立,而且具备了构建多线程的能力,在许多大型互联网平台Java的应用范围特别广泛。  java后端主要涉及到如下4个技术:  第一、S...

细思极恐:你真的会写Java吗?

导语自2013年毕业后,今年已经是我工作的第4个年头了,总在做java相关的工作,终于有时间坐下来,写一篇关于java写法的一篇文章,来探讨一下如果你真的是一个java程序员,那你真的会写java吗?...

七年Java开发的一路辛酸史:分享面试京东、阿里、美团后的心得

前言我觉得有一个能够找一份大厂的offer的想法,这是很正常的,这并不是我们的饭后谈资而是每个技术人的追求。像阿里、腾讯、美团、字节跳动、京东等等的技术氛围与技术规范度还是要明显优于一些创业型公司...

我把Java基础编程及思维导图整理的超级详细,小白都能看懂

Java基础编程及其思维导图目录:Java学习导图一、Java基本语法1.关键字与标识符2.变量分类3.运算符4.流程控制二、数组1.数组概述2.一维数组3.二维数组4.数组常见算法5....

Java 开发中的 9 个实用技巧:案例详解

Java开发中,总有一些技巧能够帮助我们提高代码质量和开发效率。下面,我们来分享9个Java技巧,每个技巧都附上实际案例,帮助你在工作中立刻应用。1.合理使用final关键字...

Java 20年,以后将往哪儿走?

在今年的Java20周年的庆祝大会中,JavaOne2015的中心议题是“Java的20年”。甲骨文公司Java平台软件开发部的副总裁GeorgesSaab的主题演讲就将关注点放在了java...

推荐1个java快速开发项目,让你接私活不用愁

??大家好,我是小编南风吹,每天推荐一个小工具/源码,装满你的收藏夹,让你轻松节省开发效率,实现不加班不熬夜不掉头发!...

教你用Java开发一个简单的JVM

一、前言几年前,接到一个开发任务:用Java开发能运行Java智能合约的虚拟机。在开发Java智能合约时,只能使用智能合约SDK提供的类和一些Java常用类(8种基本数据类型包装类;String、Bi...

java实战教程(一)软件开发流程&开发模式

这里小编为了方便处于不同学习阶段的童鞋,准备了三个系列的文章,java系列教程、java实战教程、java进阶教程,对于刚入坑的童鞋,可以先按照这三个系列教程一步步的了解,循序渐进,java实战系列教...

Java 核心技术之入门指南:全面解析Java概述

大家好,这里是Java码牛!Java核心技术入门:全面解析Java概述一、引言Java,作为一门在当今信息技术领域中被广泛应用于企业级开发的主流编程语言,其核心技术的精准掌握对于众多开发者而言,具有...

小白如何轻松上手Java开发?

Java,这款流行的编程语言,被广大开发者所钟爱。但对于初学者来说,如何入门确实是一个大问题。尤其对于毫无经验的小白,从何处开始、如何推进,都是关键。本文将带你走进Java的世界,为你揭示从零到一的进...

初学Java应该知道的知识点:Java的程序开发是什么?

Java的程序开发是什么呢?下面和千锋广州小编一起来看看吧!一般来说,Java的程序开发包括三个步骤:编写程序,编译程序,运行程序编写程序——Java源代码,.Java文件编译程序——Javac用来进...

厉害了!全靠经典之作-Java编程思想,把小白教的明明白白

今天我们来聊聊这本《Java编程思想》从我学习Java的经验来看,《ThinkinginJava》是讲解Java编程的最佳书籍!  这本书不仅详细地介绍Java语法、知识点、API类库使用,更...