首页 > 其他分享 >多态

多态

时间:2023-09-21 18:03:17浏览次数:15  
标签:void 多态 System public println class out

1.多态的概述

多态_父类

 

 2.多态的格式和使用

1 public class FuTest1 {
 2     public void method(){
 3         System.out.println("父类方法");
 4     }
 5     public void methodFu(){
 6         System.out.println("父类特有方法");
 7     }
 8 }
 9 
10 
11 public class ZiTest extends FuTest1{
12     @Override
13     public void method(){
14         System.out.println("子类特有方法");
15     }
16 }
17 
18 
19 /*
20 代码中体现多态性,其实就是一句话:父类引用指向子类对象
21 格式:
22 父类名称 对象名 = new 子类名称();
23 或者:
24 接口名称 对象名 = new 实现类名称
25  */
26 public class Demo01Multi {
27     public static void main(String[] args) {
28 //        ZiTest zi  = new ZiTest();
29 //        zi.method();
30 //        zi.methodFu();
31         //多态的写法:左侧父类的引用,指向了右侧子类的对象。
32           FuTest1 obj = new ZiTest();
33           obj.method();
34           obj.methodFu();
35     }
36 }

 3.多态中成员变量的使用特点

1 public class FuTest2 /*extends Object*/ {
 2     int num = 10;
 3     public void showNum(){
 4         System.out.println(num);
 5     }
 6 
 7 
 8 
 9 public class ZiTest2 extends FuTest2{
10     int num = 20;
11     int age = 15;
12 
13     @Override
14     public void showNum() {
15         System.out.println(num);
16     }
17 }
18 
19 
20 /*
21 访问成员变量的两种方式:
22 1.直接通过对象名称访问成员变量,看等号左边是谁,优先用谁,没有则想上找。
23 2.间接通过成员方法访问成员变量,看该方法属于谁,优先用谁,没有则想上找。
24  */
25 public class Demo02Multi {
26     public static void main(String[] args) {
27         FuTest2 obj = new ZiTest2();
28         System.out.println(obj.num); //父:10
29         //System.out.println(obj.age);//错误写法:父类没有该变量,向上找不到
30         System.out.println("=======================");
31         //子类没有覆盖重写就是父:10
32         //子类覆盖重写,就是访问子:20
33         obj.showNum();
34     }
35 }

4.多态中成员方法的使用特点

1 public class FuTest3 {
 2     public void method(){
 3         System.out.println("父类方法");
 4     }
 5     public void methodFu(){
 6         System.out.println("父类特有方法");
 7     }
 8 }
 9 
10 
11 public class ZiTest3 extends FuTest3{
12     public void method(){
13         System.out.println("子类方法");
14     }
15     public void methodZi(){
16         System.out.println("子类特有方法");
17     }
18 }
19 
20 
21 /*
22 在多态的代码中,成员方法的访问规则是:
23     看new的是谁,就优先用谁,没有则向上找。
24     口诀:编译看左边,运行看右边
25 对比一下:
26 成员变量:编译看左边,运行还看左边
27 成员方法:编译看左边,运行看右边
28  */
29 public class Domo02Multi {
30     public static void main(String[] args) {
31         FuTest3 obj = new ZiTest3(); //多态
32         obj.method(); // 父子都有,优先用子
33         obj.methodFu(); //子类没有,父类有,向上找到父类
34 
35     }
36 }

5.使用多态的好处

多态_java_02

 

 6.对象的向上转型

多态_父类_03

 

 

1 public abstract class Animal {
 2     public abstract void eat();
 3 }
 4 
 5 
 6 
 7 public class Cat extends Animal{
 8 
 9     @Override
10     public void eat() {
11         System.out.println("猫吃鱼");
12     }
13 }
14 
15 
16 public class Demo01Main {
17     public static void main(String[] args) {
18         //对象的向上转型:父类引用指向子类对象
19         Anima anima= new Cat();
20         anima.eat();
21     }
22 }

7.对象的向下转型

1 public abstract class Anima {
 2     public abstract void eat();
 3 }
 4 
 5 
 6 public class Cat extends Anima{
 7 
 8     @Override
 9     public void eat() {
10         System.out.println("猫吃鱼");
11     }
12     public void catchMouse(){
13         System.out.println("猫抓老鼠");
14     }
15 }
16 
17 
18 public class Demo01Main {
19     public static void main(String[] args) {
20         //对象的向上转型:父类引用指向子类对象
21         Anima anima= new Cat(); //本来创建的时候就是一只猫
22         anima.eat();//猫吃鱼
23         //anima.catchMouse();//错误写法
24 
25         //向下转型,进行“还原”动作
26         Cat cat = (Cat) anima;
27         cat.catchMouse();//猫抓老鼠
28 
29         //下面是错误的向下转型
30         //本来new的时候是一只猫,现在非要当作狗
31         //错误写法!编译不会报错,但是运行会出现异常
32         //java.lang.ClassCastException
33 //        Dog dog = (Dog) animal;
34     }
35 }

8.用instanceof关键字进行类型判断

1 /接上面6.7代码
 2 public class Dog extends Anima{
 3     @Override
 4     public void eat() {
 5         System.out.println("狗啃骨头");
 6     }
 7 }
 8 
 9 //如何才能直到一个父类引用的对象,本来是什么子类:
格式:  对象  instatceof  类名称
这将会得到一个boolean值的结果,也就是判断前面的对象能不能当作后面类型的实例
10 public class Demo02Instanceof {
11     public static void main(String[] args) {
12         Anima anima = new Cat();
13         anima.eat();
14         giveMePet(new Dog());
15     }

//如果希望调用子类特有的方法,需要向下转型
//判断一个父类引用animal本来是不是Dog
16     public static void giveMePet(Anima anima){
17         if (anima instanceof Dog){
18             Dog dog = (Dog) anima;
19             dog.eat();
20         }
21         if(anima instanceof Cat){
22             Cat cat = (Cat) anima;
23             cat.eat();
24         }
25     }
26 }

 



标签:void,多态,System,public,println,class,out
From: https://blog.51cto.com/u_16082673/7555769

相关文章

  • 接口和多态
    1.接口就是多个类的公共规范接口是一种引用数据类型,最重要的内容就是其中的:抽象方法如何定义一个接口的格式:publicinterface接口名称{}备注:换成了关键字interface之后,编译生成的字节码文件仍然是:.java-->.class如果是java7,那么接口中可以包含的内容有:1.常量2.抽象方法java8,......
  • C模拟CPP的方法重写(override)和多态
    1.所谓override,就是子类中重新实现了父类中的某一方法(子类和父类的同一个方法的方法体不同)2.所谓多态,最显著的一个特点就是父类指针指向不同的子类对象时,运行同一个方法会有不同的行为3.C语言模拟继承时,父类对象必须是子类对象的第一个成员4.理解了C的父类结构体指针子类结......
  • Java学习之路--oop--面向对象编程(封装、继承、多态)01
    packagecom.oop.demo01;importjava.io.IOException;//什么是面向对象/*面向对象编程:Object-OrientedPrograming(简称OOP)面向对象编程的本质就是:**以类的方式组织代码,以对象的组织(封装)数据抽象三大特性:封装继承多态*///Demo01-类publicclassDemo01{publicstaticvoid......
  • Java学习之路--oop--面向对象编程(封装、继承、多态)03
    packagecom.oop.demo04;/*封装:设计程序要追求“高内聚,低耦合”属性私有,get/set封装的意义:1.提高程序的安全性,保护数据2.隐藏代码的实现细节3.统一接口4.系统的可维护性增加*/publicclassApplication{publicstaticvoidmain(String[]args){Students1=newS......
  • Java学习之路--oop--面向对象编程(封装、继承、多态)02
    packagecom.oop.demo02;//一个项目应该只存一个main方法publicclassApplication{publicstaticvoidmain(String[]args){//new实例化了一个对象Personperson=newPerson("无言");System.out.println(person.name);}}////类:抽象......
  • JAVA17/JAVA21接口和多态机制
    day08-JAVAOOP课程目标1.【理解】什么是接口2.【掌握】接口的定义格式3.【掌握】接口的使用4.【理解】接口的成员特点5.【理解】类和接口抽象类和接口之间的关系6.【掌握】单继承多实现7.【理解】接口之间的多继承8.【掌握】接口的案例9.【理解】什么是多态......
  • 类,封装,继承,多态
    Student.java学生类:importjava.util.Objects;importjava.util.Scanner;publicclassStudent{staticintage;staticStringid,subject;staticStringname="张晗";//name="张晗"//非法,因为在class类中,赋值操作语句只允许在成员函数中才可......
  • 封装,继承,多态(下)
    8.5多态一个对象可以有多种形态。一个对象现在可以是学生类的对象,也可是老师类的对象。要形成多态必须是父类对象中存放子类的实例,用父类对象去调用子类重写的方法。语法:父类对象名=new子类();例如:QianFengstu=newStudent();QianFengtea=newTeacher();类图,可以反映出一......
  • 封装,继承,多态(上)
    8.1封装将一系列零碎的代码用方法的形式把它组装在一起形成一个完整的功能就是封装(这是广义的封装)。狭义的封装,就是将以前对类的成员变量的赋值取值操作把它们放到方法中去,用方法的方式来实现赋值和取值。Peoplezhangpeng=newPeople();zhangpeng.name="张鹏";......
  • 多态
                ......