美文网首页
java中的多态

java中的多态

作者: glory_前端 | 来源:发表于2017-07-20 14:27 被阅读0次

    多态对象的多中形态

    1.引用的多态

    1.父类的引用可以指向本类的对象
    2.父类的引用可以指向子类的对象

    2.方法的多态

    1.创建本类对象时,调用的方法为本类的方法。
    2.创建子类对象时,调用的方法为子类重写的方法或继承的方法

    父类
    package com.imooc;
    
    public class Animal {
        public int age=10;
        public String name;
        public void eat(){
            System.out.println("动物具有吃的能力");
        }
    }
    子类
    package com.imooc;
    
    public class Dog extends Animal {
            public int age=20;
            public void eat(){
                System.out.println("狗爱吃骨头");
            }
            public void method(){
                System.out.println(age);
                System.out.println(super.age);
                
            }
    }
    主方法
    package com.imooc;
    
    public class Initial {
    
        public static void main(String[] args) {
            
            
            Animal obj1=new Animal(); //父类的引用可以指向本类的对象
            Animal obj2= new Dog(); //父类的引用可以指向子类的对象
            obj1.eat(); //调用本类中的方法
            obj2.eat(); //调用的方法为子类重写的方法或继承的方法
            obj2.method();//不能调用子类中独有的方法 ,错误写法
        }
    
    }
    
    3.多态中引用类型的转换

    1.向上类型的转换,是小类型向大类型转换
    2.向下类型的转换,是大类型向小类型转换存在一定的风险。

    通常会用instanceof关键字来判断是否包含某种类型,返回一个boolean值

    package com.imooc;
    
    public class Initial {
    
        public static void main(String[] args) {
            
            Dog dog=new Dog();
            Animal animal=dog;//向上类型的转换
            Dog dog2=(Dog)animal;//向下类型转换,强制转换
            if(animal instanceof Cat){
                Cat cat=(Cat)animal;
            }else{
                System.out.println("无法进行类型转换");
            }
            
        }
    
    }
    
    4.抽象类

    抽象类前使用abstract关键字修饰的类,为抽象类
    抽象类的作用:限制规定子类必须实现某些方法,但不必关注细节

    1.应用场景
    1.在某些情况下,某个父类只知道其子类应该包含怎样的方法,但无法准确知道这些子类如何实现这些方法。
    2.从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为子类一个模板,从而避免了设计子类的随便性
    3.使用规则
    a.abstract定义抽象类
    b.abstract定义抽象的方法,只有声明,不需要实现。
    c.包含抽象方法的类是抽象类。
    d.抽象类中可以包含普通的方法,也可以包含抽象方法
    e.抽象类不可以直接创建,可以定义引用变量。

    5.接口

    接口可以理解为一种特殊的类,由全局常量和公共抽象方法组成。
    类是一种具体的实现体,而接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部数据,也不关心这些类里方法实现细节,它只规定这些类里必须提供某些方法

    1.接口的定义
    和类的定义不同,接口的定义不在使用class关键字,而是使用interface关键字。
    2.接口的基本语法

    image.png

    注意:接口一般是用来被继承和被实现的,修饰符一般用public,接口中的1.属性是常量,即使定义时不添加 public static final ,系统也会自动加上。
    2.接口中的方法只能是抽象方法,在使用时即使不添加public abstract ,系统也会自动加上。
    3.接口也是抽象的在修饰符后面需要加上abstract,如果不加系统会给我们自动加上。

    3.使用接口
    一个类可以实现一个或多个接口,实现一个接口用implements关键字,java中一个类只能继承一个父类,不够灵活,通过多个接口可以做补充。

    image.png
    4.抽象类图形分析
    image.png

    可以定义一个Telphone抽象类,用CellPhone和Smartphone继承抽象类。

    抽象类
    package com.xhouxiang;
    
    public abstract class TelePhone {
        public abstract void message();
        public abstract void tell();
    }
    CellPhone继承
    package com.xhouxiang;
    
    public class CellPhone extends TelePhone {
    
        @Override
        public void message() {
            // TODO Auto-generated method stub
            System.out.println("通过键盘发短信");
        }
    
        @Override
        public void tell() {
            // TODO Auto-generated method stub
            System.out.println("通过键盘打电话");
        }
    
    }
    SmartPhone继承
    package com.xhouxiang;
    
    public class SmartPhone extends TelePhone {
    
        @Override
        public void message() {
            // TODO Auto-generated method stub
            System.out.println("通过语音发短信");
        }
    
        @Override
        public void tell() {
            // TODO Auto-generated method stub
            System.out.println("通过语音打电话");
        }
    
    }
    主函数
    package com.xhouxiang;
    
    public class initialmian {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            CellPhone obj1=new CellPhone();
            SmartPhone obj2=new SmartPhone();
            obj1.message();
            obj1.tell();
            obj2.message();
            obj2.tell();
        }
    
    }
    
    5.接口图形化分析
    image.png

    智能手机也可以玩游戏,Psp也可以玩游戏,PsP不能继承TelPhone这个类,只有写一个接口让他们各自实现。

    接口
    package com.xhouxiang;
    
    public interface InterPlaygame {
        public void playgame();
    }
    智能手机玩游戏
    package com.xhouxiang;
    
    public class SmartPhone extends TelePhone implements InterPlaygame {
    
        @Override
        public void message() {
            // TODO Auto-generated method stub
            System.out.println("通过语音发短信");
        }
    
        @Override
        public void tell() {
            // TODO Auto-generated method stub
            System.out.println("通过语音打电话");
        }
    
        @Override
        public void playgame() {
            // TODO Auto-generated method stub
            System.out.println("智能手机打游戏");
        }
    
    }
    

    相关文章

      网友评论

          本文标题:java中的多态

          本文链接:https://www.haomeiwen.com/subject/zbslkxtx.html