JAVA10-抽象类(抽象方法)、接口的相关知识

抽象类

为什么要用抽象类
在生活中一些抽象和定义事物本质概念的,我们适合用抽象去描述
他揭示了is a XXX
比如动物类 形状类 菜类 水果类
对于这样的一些类,他的方法的方法体不好设计
抽象类语法

public abstract class Animal{}

他和普通类最大的区别就是new不了对象
定义事物本质,实现多态

抽象类的特点
1.能设计成抽象类的类都是用来定义事物本质,其属性和方法都是定义是XXX的条件(平时就思考当方法不好具体写实现时,就将该类设计成抽象类)
2.抽象类不能new 出对象,可以有构造方法,但是可以用多态去new他的非抽象子类
3.抽象类可以有抽象方法,也可以有普通方法

抽象类语法上和普通类的区别
1.class被abstract所修饰的类叫做抽象类
2.抽象类可以有构造方法,但是没法new,可以被调用(非抽象子类实例化时)
3.抽象类可以有抽象方法,也可以有普通方法,但是普通类不能有抽象方法
4.有抽象方法的类一定是抽象类,抽象类不一定有抽象方法(常考)
5.抽象类关注点在属性

总结:
1.当一个类的方法体不好设计时,可以将这个类设计为抽象类
2.抽象类可以有构造方法,但是不允许new对象
3.抽象类一般只是用来定义事物本质所拥有的的静态属性
4…有抽象方法的类一定是抽象类,抽象类不一定有抽象方法

抽象方法的语法
普通方法:[权限修饰符] [static] 返回值 方法名(参数列表){方法体}
抽象方法:[权限修饰符] [static] abscract 返回值 方法名(参数列表);

public abstract void eat() ;

抽象方法的特点
1.没有方法体
2.抽象类被非抽象类继承时,必须要重写

public abstract class Animal {
	String name;//姓名
	int age;//年龄
	
	//吃饭
	public abstract void eat();
	
	//自我介绍的方法
	public void showName(){
		System.out.println("姓名:"+this.name+",年龄:"+this.age);
	}

}

public class Cat extends Animal{
	
    //eat方法必须要被重写
	@Override
	public void eat() {
		System.out.println("猫在吃鱼");
		
	}

}

static,final,abstract总结
在这里插入图片描述
*

接口*

**接口的定义:**是一种非常特殊的抽象类,他关注的在于抽取事物本质外共有的功能,通常用于描述has a XXX
接口语法:

public interface 接口名{
    //属性默认为常量, 无论你有没有加public static final。 
    public static final 数据类型 变量名=值;
    //方法默认都是抽象方法,无论你有没有加public abstract 
    public abstract 返回类型 方法名(参数列表);  
    }
    
//实现接口
public class 类名 implements 接口名{}

接口的特点:
1.java中的继承都是单继承,接口是多实现

public class Animal extends Object implements Aa,Bb,Cc{}

2.接口和接口之间没有实现,但是可以多继承

public interface Aa extends Bb,Cc,Dd{};

3.接口中的属性默认为常量,方法默认都是抽象方法

接口和抽象类的区别
1.抽象类可以有抽象方法,也可以有普通方法,但是接口中都是抽象方法
2.抽象类可以有成员变量,但是接口中都是常量
3.抽象类是揭示事物本质的概念,用于描述 is a XXX
4.在于抽取事物本质外共有的功能,通常用于描述has a XXX
注意:抽象类和接口都可以实现多态,也适用于向上向下转型

案例讲解
实现一个盼盼防盗门,其本质是门,拥有防盗的功能

package demo3;
/**
 * @author Eric 15665627080@163.com
 * @date 2019年8月7日
 * @time 下午2:26:15
 * package demo3;
 * public class Door{ }
 * 类说明	
 */
public abstract class Door {
	int high;//高度
	int width;//宽度
	String color;//颜色
	public Door() {
		super();
	}
	
	//开门
	public void  openDoor(){
		System.out.println("门开了");
	}
	
	//关门
	public   void  closeDoor(){
        
        System.out.println("锁上了门");}



package demo3;
/**
 * @author Eric 15665627080@163.com
 * @date 2019年8月7日
 * @time 下午2:29:20
 * package demo3;
 * public class Alarm{ }
 * 报警	
 */
public interface Alarm {
	//防盗报警
	void Alarm();
}



package demo3;

/**
 * @author Eric 15665627080@163.com
 * @date 2019年8月7日
 * @time 下午2:30:05 package demo3; public class PanPanDoor{ } 类说明
 */
public class PanPanDoor extends Door implements Alarm {

	@Override
	public void Alarm() {
		System.out.println("报警....");

	}

}



package demo3;
/**
 * @author Eric 15665627080@163.com
 * @date 2019年8月7日
 * @time 下午2:31:07
 * package demo3;
 * public class Demo{ }
 * 类说明	
 */
public class Demo {
	public static void main(String[] args) {
		PanPanDoor p=new PanPanDoor();
		p.Alarm();
		p.closeDoor();
		p.openDoor();
	}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值