zoukankan      html  css  js  c++  java
  • java32

    抽象类:
    -1使用抽象类后的要求:
    子类必须要覆盖父类
    -2使用抽象类后解决的问题:
    父类不需要再写方法体了(也就是花括号及里面的内容)。(避免了相同需求[都是求图形面积],而不同算法[计算图形面积方法不同]的问题)
    -3注意:

    • 抽象方法必须定义在抽象类中(类和方法前都加abstract)或者接口中
    • abstract不能和private(子类无法继承),final(不允许被继承),static(有static修饰的
      是属于类的,而方法属于对象)一起使用
    • 若是抽象类就不能用此构造器来创建对象。
    • 子类必须覆盖父类
    • 若子类不想覆盖父类,则需要子类加上abstract,之后就由孙类来继承父类中的抽象方法。
    • 抽象类中是可以有非抽象方法的(供子类或者孙类创建对象后调用)
    • 构造方法不能定义为私有化(因为子类继承时必须先要调用父类的构造方法,如果构造方法私有化,将无法继承,并且抽象方法只有被子类继承后才可以实现内部的方法体)
      1.抽象类必须有子类才有意义
      2.子类中会默认有构造器来调用父类的构造器
      3.接口:表示一种规范.用来约束使用者该怎么做
      interface 接口名(命名规则:在名称前加上I后加上able){
      }
      -2接口也生成对应的字节码
      -3接口其实是一个特殊的抽象类

    4.接口注意点
    -1接口没有构造器(也没有默认构造器),不能创建对象
    -2接口中定义的变量,都是全局的静态常量(相当于加了final)

    interface Iusbable{
    	String name = "ss";
    //相当于public static final String name;又因为当final修饰一个字段时,字段相当于常量,所以必须加上初始值
    	void a();
    }
    

    -3接口中定义的方法都是公共的抽象方法public abstract void a();
    -4接口里可以定义内部类,内部类也是公共抽象的
    -5接口是可以被继承的,并且可以多继承(可以同时继承多个类,且继承的父类也必须是接口类),但是普通的类不可以多继承的
    -6接口中一般不会有方法的覆盖(没有意义)
    5.接口:
    开始只是规范说明
    现在是接口的实现类
    implement:实现
    实现关系也称继承关系(可以写成多态的形式),但不等同
    接口的实现:
    -1先自己定义一个类,这个类既可以继承普通的类(一个),也可以实现(implements)其他的接口(多个)
    -2这个类必须去覆盖接口中的方法(覆盖的时候,子类覆盖权限必须大于等于父类的范围)
    -3到具体的对象
    面向接口编程:创建对象的时候可以赋值给接口

    eg:
    interface Iwalkable{   //接口
    	void walk();	//public abstract void walk
    }
    class Animal{  //普通的类
    	String name;
    }
    class Cat extends Animal implements Iwalkable{
    	public void walk() {  //覆盖接口中的方法,权限为public
    		System.out.println("走猫步");
    	}
    }
    public class t {
    	
    public static void main(String[] args) {
    	Iwalkable a = new Cat();//面向接口编程
    	a.walk();
    }
    }
    

    6.抽象类和接口

    • 相同点:
      都是被普通的类实现或者继承
      里面都有抽象方法,并且子类(两者子类所指不同)中必须覆盖其父类的抽象方法
      都不能实例化(即不能new())
    • 不同点:
      抽象类中有构造器(但一般不会去创建构造器,因为没有意义,抽象类本身就是抽象的,没有具体的东西),而接口中没有构造器
      抽象类中可以包含普通方法和抽象方法,而接口中只能有抽象方法
      接口中默认成员变量:public static final 变量--》相当于静态常量,抽象类中是默认权限(同一个包中能访问,不同包中是不能访问的)
      接口中的方法:public abstract void a(){};,抽象类中是默认权限:void a(){};
  • 相关阅读:
    阿里巴巴开源的Asynchronous I/O Design and Implementation
    maven 出现错误 -source 1.5 中不支持 diamond 运算符
    Kafka设计解析(六)- Kafka高性能架构之道
    Kafka设计解析(七)- Kafka Stream
    flink如何动态支持依赖jar包提交
    Hbase技术笔记
    windows环境:idea或者eclipse指定用户名操作hadoop集群
    HBase源码实战:BufferedMutator
    HBase工具:如何查看HBase的HFile
    HBase源码实战:CreateRandomStoreFile
  • 原文地址:https://www.cnblogs.com/-zero/p/10387537.html
Copyright © 2011-2022 走看看