zoukankan      html  css  js  c++  java
  • Java日志第19天 2020.7.24

    接口中的注意事项

    1.接口中不能有静态代码块和构造方法

    2.一个类的直接父类是唯一的,但可以实现多个接口

    3.实现类实现的多个接口中有重复的方法,只需要覆盖重写一次即可。

    4.如果实现类没有实现该类所有接口的所有方法,则该类是抽象类。

    5.如果实现类实现的多个接口中存在重复的默认方法,那么实现类一定要对冲突的默认方法进行覆盖重写

    6.一个类如果直接父类中的方法和接口中的默认方法产生冲突,优先使用父类中的方法。

    接口与接口之间是多继承的

    public interface MyInterfaceA {
    
        public abstract void methodAbs();
    
        public default void methodDefault(){
            System.out.println("重复默认方法");
        }
    }
    public interface MyInterfaceB {
    
        public abstract void methodAbs();
    
        public default void methodDefault(){
            System.out.println("重复默认方法");
        }
    }
    public interface MyInterface extends MyInterfaceA, MyInterfaceB{
    
        @Override
        void methodAbs();
    
        @Override
        default void methodDefault() {
            System.out.println("覆盖重写重复默认方法");
        }
    }

    父接口中默认方法重复,子接口必须进行方法覆盖重写。

    多态性

    extends和implements是多态性的前提

    代码中多态性的体现,其实就是父类引用指向子类对象

    格式:父类名称 对象名 = new 子类名称();

        或者 接口名称 对象名 = new 实现类名称();

    访问方法:new的是谁就调用谁,没有则向上找

    访问变量:等号左边是谁就调用谁,没有则向上找

    对象的向上转型

    其实就是多态的写法

    格式: 父类名称 对象名 = new 子类名称()

    含义 预测创建一个子类对象,当做父类使用

    注意事项 向上转型一定要是安全的

    public abstract class Animal {
    
        public abstract void eat();
    
    }
    
    public class Cat extends Animal {
    
        public void eat(){
            System.out.println("猫吃鱼");
        }
    
    }
    
    public class Test {
        public static void main(String[] args) {
    
            //向上转型
            Animal animal = new Cat();
            animal.eat();
        }
    }

    结果如下

    对象的向上转型

    向上转型后的对象不能调用子类特有的方法,如果想要调用这些方法,就需要对象的向下转型。对象的向下转型就是一个还原的动作。

    格式:子类名称 对象名 = (子类名称)父类对象

    含义 将父类对象还原为本来的子类对象

    public class Cat extends Animal {
    
        public void eat(){
            System.out.println("猫吃鱼");
        }
    
        public void catchMouse(){
            System.out.println("猫抓老鼠");
        }
    
    }
    public class Test {
        public static void main(String[] args) {
    
            //向上转型
            Animal animal = new Cat();
            animal.eat();
    //      animal.catchMouse();//报错!不能这样调用
    
            //进行向下转型
            Cat cat = (Cat) animal;
            cat.catchMouse();
        }
    }

    instanceof关键字

    对象名 instanceof 类名称

    返回的是布尔值,判断对象能否当做类的实例

    public class Test {
        public static void main(String[] args) {
    
            //向上转型
            Animal animal = new Cat();
            animal.eat();
    //      animal.catchMouse();//报错!不能这样调用
    
            //进行向下转型
            //判断能否向下转型后再进行
            if(animal instanceof Cat){
                Cat cat = (Cat) animal;
                cat.catchMouse();
            }
            
        }
    }
  • 相关阅读:
    Codis的源码编译生成tar包
    Jenkins安装war版本
    Eclipse中src/main/resources配置文件启动问题
    关于Web项目的pom文件处理
    spark streaming的理解和应用
    Azkaban安装
    Mysql安装
    Oracle递归操作
    WebService 入门
    BaseAction 类
  • 原文地址:https://www.cnblogs.com/Gazikel/p/13372052.html
Copyright © 2011-2022 走看看