12.抽象类abstract、接口interface与枚举enum

1.抽象类

必须含有未实现的方法(即没有方法体的方法),且类必须用abstract修饰,方法可不用(也可用)abstract。

抽象类与普通类的区别仅仅一点:是有未实现的方法 (因)

不能被实例化(果)

public abstract class Employee
{
   private String name;
   private String address;
   private int number;
   
   public abstract double computePay();
   
   //其余代码
}

2.接口

接口都是未实现的方法,它不是class类

它与抽象类的区别是:

1.不能有字段属性

2.可以多实现(继承只能单继承)

不能被实例化(继承了抽象类的特征)

/* 文件名 : Animal.java */
interface Animal {
   public void eat();
   public void travel();
}

3.enum

特殊的枚举类,但是不是class.

enum Color 
{ 
    RED, GREEN, BLUE; 
} 
  
public class Test 
{ 
    // 执行输出结果
    public static void main(String[] args) 
    { 
        Color c1 = Color.RED; 
        System.out.println(c1); 
    } 
}


 

#抽象类、接口
package com.hzit.demo1.model;

/**
 * 动物类
 *
 *   如果一个类有抽象方法,那么这个类必须是抽象类
 *   一个抽象类中可以有普通方法
 *   一个抽象类中可以没有抽象方法
 *
 *
 *
 *
 *
 *
 */
public abstract class Animal {

    public abstract void eat();
    
    void add(){
    
    }

}
package com.hzit.demo1.model;

/**
 * 如果子类继承抽象必须实现所有抽象方法
 */
public class Dog extends Animal {
    @Override
    public void eat() {
        System.out.println("狗吃杂食!!!!!");
    }
}

package com.hzit.demo1.model;

public abstract class Fu {
}

package com.hzit.demo1.model;

public abstract class Zi extends Fu {
}

2
package com.hzit.demo1;

import com.hzit.demo1.model.Animal;
import com.hzit.demo1.model.Dog;

/**
 * 抽象类
 *  概述:
 *
 *  抽象类不能直接给创建
 *      1. 可以通过创建它的普通子类来获取这个对象
 *
 *
 */
public class Demo1 {
    public static void main(String[] args) {
        // Animal animal = new Animal();
        Animal animal =  new Dog();
    
        System.out.println(animal);
    
    }
}

package com.hzit.demo1;

import com.hzit.demo1.model.Animal;
import com.hzit.demo1.model.Dog;

/**
 * 抽象类: 给abstract关键字修饰的类为抽象类,抽象类中可以有抽象方法,有抽象方法的类一定是抽象类
 *   抽象类不能直接给创建,能通过创建抽象类的普通子类创建,通过new 的时候实现内部方法也是可以创建成功
 *
 * 什么时候使用:当一个类中有些方法不确定具体 ‘内容 (方法体)’  使用抽象类
 *
 * 怎么用:普通类用abstract 方法用 abstract 修饰。
 *
 *
 *
 */
public class Demo2 {
    public static void main(String[] args) {
        // Animal animal = new Animal();
        //Animal animal =  new Dog();

        //System.out.println(animal);
    
        Animal animal = new Animal() {
            @Override
            public void eat() {
                System.out.println("我也不知道吃什么");
            }
        };
        animal.eat();

    }
}

3
package com.hzit.demo2;

/**
 * 接口只能写抽象方法   jdk1.8之前
 *
 *
 * 1.8
 * default修饰的方法,这个方法必须有方法体
 *  default 修饰的方法可以给重写 不推荐
 *
 * 可以写静态的方法,通过接口名.方法名称调用  不推荐使用
 *
 */
public interface B {

    default void show(){
        System.out.println("这个是default方法....");
    }
    public static void show1(){
        System.out.println("show1.......");
    }

}

package com.hzit.demo2;

public class B1 implements B {
    public void show(){
        System.out.println("这个是default方法....");
    }
}

4
package com.hzit.demo2;

public interface A {
}

package com.hzit.demo2;

/**
 * 接口可以多现实
 *     1.为什么类不能多继承
 *     2.为什么接口可以多现实
 *
 *
 *
 */
public class Pc implements Usb,A {

    @Override
    public void load() {
        System.out.println("不需要关系你怎么实现的。");
    }
}

package com.hzit.demo2;

public class Fu  {
    public static void show(){

    }
}

package com.hzit.demo2;

public  class Zi extends Fu {

  /*  public void show(){
        System.out.println("123456789");
    }*/
}


package com.hzit.demo2;

/**
 * interface 定义接口的关键字
 *  接口是定义规范?
 *      明白到底规范什么?
 *
 * 接口好像不能有方法体
 *
 * 接口只写方法不写方法体?
 * 其实接口就是定义方法的规范的,也就是说接口就是规范方法的  重点规范 方法名称  方法参数 方法返回值
 *
 *
 * 为什么要定义规范?
 *  public int add();
 *  public int insert();
 *  public boolean insert();
 *  public boolean add();
 *  *
 */
public interface Usb {

    public void load();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值