zoukankan      html  css  js  c++  java
  • 关于抽象类,接口以及多态

    抽象类和接口的区别:

    • 抽象类和子类是 is-a的关系(如animal类和cat类)
    • 接口和实现类是 has-a的关系(如bird类和fly接口)

    关于抽象类:

    public abstract class  Animal {
        public abstract void eat();
        public void sleep()
        {
            System.out.println("动物都得睡觉");
        }
    
    }
    public class Cat extends Animal {
        public void eat() {
            System.out.println("猫吃鱼");
        }
    }
    public class Test {
      //老是忘记,直接在类的代码里面开始new对象,忘psvm
    public static void main(String[] args) { Cat cat = new Cat(); Animal animal=new Cat();//使用了抽象类多态 cat.eat(); cat.sleep(); animal.eat(); animal.sleep(); } }
    • 方法要么有实现体,要么是抽象方法
    • 抽象方法只能在抽象类里面
    • 抽象类中所有的抽象方法都必须被继承的类重写(要么继承的子类本身就是个抽象类
    • 抽象类不能new对象
    • 抽象类中可以有正常的方法
    • 可以有成员变量
    • 可以搞构造方法?(用于子类访问父类数据的初始化

    关于接口:

    是对行为的抽象,配合多态使用

    成员变量的默认修饰符为:public static final
    方法的默认修饰符是:public abstract
    修饰符都不用写了

    看以下例子,同一个logging登录接口有好几个实现类,之后使用时只用new合适的类并且传参即可

    public interface Logging {
        void logging();
    }
    public class QQLogging implements Logging{
        public void logging() {
            System.out.println("采用QQ方式登录");
        }
    }
    public class WeChatLogging implements Logging{
        public void logging() {
            System.out.println("采用微信方式登录");
        }
    }
    public class Test {
        public static void main(String[] args) {
            Logging logQQ=new QQLogging();
            Logging logWeChat=new WeChatLogging();
            log(logQQ);
            log(logWeChat);
    
        }
    
        private static void log(Logging log)
        {
            log.logging();
        }
    
    }

    现在实际开发中,这种“面向接口编程”使用的很多

  • 相关阅读:
    截取字符串时长度的问题
    《Asp.Net 2.0 揭秘》读书笔记(三)
    gmail的相关参数
    《Asp.Net 2.0 揭秘》读书笔记(四)
    《Asp.Net 2.0 揭秘》读书笔记(五)
    《Asp.Net 2.0 揭秘》读书笔记(一)
    今夜,我又坐在电脑面前想你
    如果你是一名经理,你必须履行经理的四项职责
    向明月买醉
    想找个人真心真意过一生
  • 原文地址:https://www.cnblogs.com/take-it-easy/p/13716525.html
Copyright © 2011-2022 走看看