• java笔记9-abstract和接口


    这一节讲一下abstract抽象的关键字和接口  abstract可以修饰类和方法

    修饰的方法叫做抽象方法:有方法的结构没有方法体(没有大括号)的方法(native修饰的也没有方法体但不属于抽象方法),有抽象方法的类 必须改成抽象类或者接口;

    abstract修饰的类是抽象类 抽象类里面不一定有抽象方法,

    抽象类可以继承抽象类和普通类(正经不这么干)
    抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。

    //接口不能被实例化 也没有构造方法 不能有块
    //接口可以继承多个接口 一个类也可以实现多个接口
    
    
    
    //声明接口的时候 不用写abstract默认是隐式抽象的
    public abstract interface InterfaceAnimal extends A,B{
        //接口的属性默认被public static final修饰
        //被final修饰的属性需要赋值
        public static final String name="人";
        //接口的方法都是共有的抽象方法不写也默认被abstract public修饰
        //类实现接口的时候 方法的返回值必须一致
        public abstract String eat();
    
    }
    
    
    interface A{
        void sleep(String name);
    
    }
    
    interface B{
        void talk();
    
    }
    //抽象类  被abstract修饰的类叫做抽象类
    //抽象类不能被实例化(初学者很容易犯的错),如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。
    //抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
    abstract class TestAbstact implements InterfaceAnimal{
        //抽象类可以包含属性、静态变量、常量、块 静态块
        String name;
        static String  address;
        final int number=1;
        //抽象类可以包含构造方法、静态方法、一般方法、final修饰的方法
        //抽象类不能调用构造方法 只能子类通过继承使用
      //构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。
        public TestAbstact() {}
        public TestAbstact(int a) {
            System.out.println(a);
        }
        //静态方法
        //静态方法不能是抽象方法,否则可以直接类名调用静态方法且没有方法体
        public static void teststaticmethod(){
    
            System.out.println("我是静态方法");
        }
        //一般方法
        public void talk(){
            System.out.println("我把接口的说话方法实现了,现在是一个普通的方法");
        }
    
        //抽象方法 抽象方法是没有方法体的({}这种叫有方法体方法体没内容,不要混淆)
        public abstract String eat();
        //抽象方法的重载
        public abstract void eat(String name);
         //子类继承(或实现)父类(接口)的抽象方法时权限应该放的更开,接口所有方法都是public方法所以只能是public权限修饰
        //抽象类继承(或实现)抽象方法后可以不用具体实现 下面代码可以不写
        public  void sleep(String name){
            System.out.println("抽象类睡觉的方法");
        };
    }
    
    //子类是普通类继承抽象类(接口)必须把所有的抽象方法都重写包含抽象类继承的接口的抽象方法
    //抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。
    
    class SunTestAbstact extends TestAbstact{
        String name="1";
        //需要实现父类的抽象方法
        public String eat(){
            System.out.println("子类吃饭的方法");
            return "吃的放回值";
        }
        //需要实现父类的抽象方法的重载
        public void eat(String name){
            System.out.println(name);
        }
        //需要实现父类继承的接口继承的接口的抽象方法 如果父类做了实现子类就不需要再次实现了
        public void sleep(String name){
            System.out.println("继承抽象类子类的睡觉方法");
        }
        //需要实现父类继承的接口继承的接口的抽象方法
        public void talk(){
            System.out.println("子类讨论的方法");
        }
    
    }
    
    
    
    
    
    //普通类
    public class AbstractClass {
        public static void main(String[] args) {
            SunTestAbstact sun =new SunTestAbstact();
            System.out.println("123");
    
    
        }
    
    //implements InterfaceAnimal
    }
    1、定义了A、B两个接口
    2、InterfaceAnimal接口继承了A,B接口
    3、抽象类TestAbstact继承了InterfaceAnimal
    4、普通类SunTestAbstact继承了抽象类
  • 相关阅读:
    计算子网掩码中存在的主机数
    IP相关常识
    IP子网掩码划分及设置
    spark的外排:AppendOnlyMap与ExternalAppendOnlyMap
    Struts2+JSON数据
    Spark -14:spark Hadoop 高可用模式下读写hdfs
    log4j 日志 配置 学习
    flume的memeryChannel中transactionCapacity和sink的batchsize需要注意事项
    Python画图matplotlib展示图中中文乱码
    Python pycharm(windows版本)部署spark环境
  • 原文地址:https://www.cnblogs.com/ysmdbk/p/10942751.html
Copyright © 2020-2023  润新知