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();
}