java学习笔记(二) 抽象类与接口的区别

抽象类

用abstract关键字来修饰一个类时,这个类就叫做抽象类。

用abstract关键字修饰一个方法时,这个方法就是抽象方法。

注意事项:

1.抽象类不能被实例化

public  abstract class Animal {
	     String name;
         int age;
	}

     //抽象类Animal不能被实例化 


2.抽象方法不能有主体

public  abstract class Animal {
	String name;
	int age;
	
	public abstract void eat();  //eat方法只有方法名。没有主体
}

 3.抽象类不一定要包含abstract方法(抽象类可以没有abstract方法)

一旦包含了abstract方法,则这个类必须声明为abstract

public  abstract class Cat{    //Cat类是抽象类,但可以没有abstract方法
	String name;
	int age;
}

public  abstract class Dog {   //eat()方法是abstract方法,所以Dog类必须声明为abstract
	String name;
	int age;
	
	public abstract void eat();
}

接口

给出一些没有内容的方法,封装到一起,到某个类要使用的时候,在根据具体情况把这些方法写出来。

声明接口:访问修饰符  interface 接口名称{     }         

类实现接口 : class  类名 implements 接口名称{   变量;方法   }

注意事项:

1.接口不能实例化

2.接口中的所有方法都不能有主体

3.一个类可以实现多个接口

4.接口中可以有变量(但是变量不能用private和protected修饰)

    a.接口中的变量,本质上都是static的,而且是final的,不管你加不加static修饰

    b.在java开发中,我们经常把经常使用的变量,定义在接口中,作为全局变量使用。访问形式:接口名.变量名

5.一个接口不能继承其他的类,但是可以继承别的接口


默认方法

前面说到抽象类和接口方法都不能有主体,但是有时候我们有时候需要重复使用某个方法时,我们希望在抽象类和接口中的方法有主体,这时候我们可以用default关键字来修饰方法。

public abstract class animal{
      default public abstract eat(){
           System.out.println("动物都要吃东西");
      }
}

public interface Hero{
      default public void like(){
           System.out.println("我们都喜欢英雄");
      }
}

接口与抽象类的区别 

区别1:
    子类只能继承一个抽象类,不能继承多个
    子类可以实现多个接口
区别2:
    抽象类可以定义
             public,protected,package,private
             静态和非静态属性
              final和非final属性
    但是接口中声明的属性,只能是
              public
              静态
              final的
              即便没有显式的声明

猜你喜欢

转载自blog.csdn.net/weixin_42164004/article/details/83822417
今日推荐