黑马程序员——Java基础——抽象类、接口

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------


一、抽象类

1.定义

Java中可以定义没有方法体的方法,该方法的具体实现由子类完成,该方法称为抽象方法,包含抽象方法的类就是抽象类。抽象类往往用来表征我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。比如:猫和狗,它们之间是不同的,但是它们又都属于动物这样一个概念,它就是一个抽象概念。正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。

2.特点

1)抽象方法一定在抽象类中,只对方法进行声明,没有方法主体。
2)抽象方法和抽象类都必须被abstract关键字修饰。
3)抽象类不可以用new创建对象。因为调用抽象方法没意义。
4)抽象类中的抽象方法要被使用,必须由子类复写所有的抽象方法后,建立子类对象调用。
   如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。

//定义一个抽象动物的父类
abstract class Animal
{
	//抽象方法
	public abstract void eat();
}
//定义子类猫,继承动物类,复写抽象方法
class Cat extends Animal
{
	@Override
	public void eat() {
		// TODO Auto-generated method stub
		System.out.println("猫吃老鼠");
	}	
}
//定义子类狗,继承动物类,复写抽象方法
class Dog extends Animal
{
	@Override
	public void eat() {
		// TODO Auto-generated method stub
		System.out.println("狗吃骨头");
	}	
}


3.与一般类的区别

抽象类与普通类的区别就是不能创建实例对象和允许有abstract方法,其他都一样。

意味着抽象类可以继承类,也可以实现接口,内部也有构造函数,可以有静态的main方法,只要理解了抽象类和一般类的区别,对一些常见问题就很容易回答

4.注意事项

抽象关键字abstract和哪些关键字不可以共存

final:被final修饰的类不能有子类。而被abstract修饰的类一定是一个父类。
private: 抽象类中的私有的抽象方法,不被子类所知,就无法被复写。
         而抽象方法出现的就是需要被复写。
static:如果static可以修饰抽象方法,那么连对象都省了,直接类名调用就可以了。
        可是抽象方法运行没意义。

二、接口

1.定义

Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。可以被认为是一个特殊的抽象类。当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示。接口使用interface来表示,子类中用implements实现。可以被类多实现,也是对多继承不支持的转换形式。java支持多实现。

2.格式特点

接口中常见定义:常量,抽象方法。

接口中的成员都有固定修饰符。接口中的成员都是public的。

常量:public static final

方法:public abstract

3.特点

1)接口是对外暴露的规则。
2)接口是功能的扩展。
3)接口的出现降低了耦合性

//定义一个抽象动物的父类
abstract class Animal
{
 //抽象方法
 public abstract void eat();
}
//定义一个爬树的功能
interface ClimbTree
{
 public void climbtree();
}
//定义子类狗,继承动物类,复写抽象方法
class Dog extends Animal
{
 @Override
 public void eat() {
  // TODO Auto-generated method stub
  System.out.println("狗吃骨头");
 } 
}
//定义子类猫,继承动物类,实现爬树接口,复写方法,具备爬树的功能
class Cat extends Animal implements ClimbTree
{
 @Override
 public void eat() {
  // TODO Auto-generated method stub
  System.out.println("猫吃老鼠");
 }
 @Override
 public void climbtree() {
  // TODO Auto-generated method stub
  System.out.println("上树");
 } 
}


三、抽象类和接口的区别

相同点:

1.都是不断向上抽取的概念

2.通常都在顶层。

3.可以在内部定义抽象方法

4.都不可以实例化,需要子类来实现。

不同点:

1.抽象类体现继承关系,一个类只能单继承。

  接口体现实现关系,一个类可以多实现。同时接口与接口之间有继承关系。

2.抽象类可以有构造方法,接口中不能有构造方法

3.抽象类中可以有普通成员变量,接口中没有普通成员变量

4.抽象类中可以包含非抽象的普通方法,

  接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。

5.抽象类中的抽象方法的访问类型可以是publicprotected

  接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。

6.抽象类中可以包含静态方法,接口中不能包含静态方法

7.抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意

  接口中定义的变量只能是public static final类型,并且默认即为public static final类型。












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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值