zoukankan      html  css  js  c++  java
  • java基础(多态、抽象类、封装、接口)

    一、多态
    特点:同一个事件发生在不同的对象上会产生不同的结果
    多态存在的三个必要条件
    1、继承
    2、重写
    3、父类引用指向子类对象:Parent p = new Child();
    当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。

    多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理

    实现方式:
    1、重写
    2、接口
    3、抽象类和抽象方法

    二、抽象类、抽象方法
    1、 抽象类不能被实例化(抽象类自己可以有已经实现的方法)
    2、抽象方法只包含一个方法名,而没有方法体
    3、如果一个类包含抽象方法,那么该类必须是抽象类。
    4、构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法
    5、任何子类必须重写父类的抽象方法,或者声明自身为抽象类

    public abstract class Employee
    {
       private String name;
       private String address;
       private int number;
       
       public abstract double computePay();
       
    }

    三、封装
    1. 修改属性的可见性来限制对属性的访问(一般限制为private)
    2. 对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问

    public class Person{
        private String name;
        private int age;
    ​
        public int getAge(){
          return age;
        }
    ​
        public String getName(){
          return name;
        }
    ​
        public void setAge(int age){
          this.age = age;
        }
    ​
        public void setName(String name){
          this.name = name;
        }
    }

     四、接口

    1、接口和类的区别:
      (1)接口不能用于实例化对象。
      (2)接口没有构造方法。
      (3)接口中所有的方法必须是抽象方法。
      (4)接口只能包含 static 和 final 的成员变量。
      (5)接口不是被类继承了,而是要被类实现
      (6)接口支持多继承

    2、抽象类和接口的区别:
      (1)一个类只能继承一个抽象类,而一个类却可以实现多个接口
      (2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。

    3、特性:
      (1)接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。
      (2)接口中的方法也是隐式抽象的, 会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)
              JDK 1.8 以后,接口允许包含具体实现的方法,该方法称为"默认方法",默认方法使用 default 关键字修饰
              JDK 1.9 以后,允许将方法定义为 private,使得某些复用的代码不会把方法暴露出去
      (3)接口中的变量也是隐式抽象的, 会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)

    4、接口的实现
      必须实现接口内所描述的所有方法,否则就必须声明为抽象类

    /* 文件名 : Animal.java */
    interface Animal {
       public void eat();
       public void travel();
    }
    
    /* 文件名 : MammalInt.java */
    public class MammalInt implements Animal{
     
       public void eat(){
          System.out.println("Mammal eats");
       }
     
       public void travel(){
          System.out.println("Mammal travels");
       } 
     
       public static void main(String args[]){
          MammalInt m = new MammalInt();
          m.eat();
          m.travel();
       }
    }

    5、接口的多继承

    public interface Hockey extends Sports, Event

    6、标记接口
      没有任何方法的接口被称为标记接口。标记接口主要用于以下两种目的:
      (1)建立一个公共的父接口:
    正如EventListener接口,这是由几十个其他接口扩展的Java API,你可以使用一个标记接口来建立一组接口的父接口
    例如:当一个接口继承了EventListener接口,Java虚拟机(JVM)就知道该接口将要被用于一个事件的代理方案。
      (2)向一个类添加数据类型:
    这种情况是标记接口最初的目的,实现标记接口的类不需要定义任何接口方法(因为标记接口根本就没有方法),
    但是该类通过多态性变成一个接口类型

    package java.util;
    public interface EventListener
    {}
    测试进阶轨迹
  • 相关阅读:
    Thinkphp下实现D函数用于实例化Model格式
    Thinkphp3.2下导入所需的类库 同java的Import 本函数有缓存功能
    Thinkphp下记录和统计时间(微秒)和内存使用情况
    python打造seo必备工具-自动查询排名
    Python爬虫爬企查查数据
    解决Android8.0系统应用打开webView报错
    团队冲刺第七天个人博客
    团队冲刺第六天个人博客
    团队冲刺第五天个人博客
    团队冲刺第四天个人博客
  • 原文地址:https://www.cnblogs.com/yinwenbin/p/14812249.html
Copyright © 2011-2022 走看看