Java抽象类接口的使用

前言:接口和抽象类是在面向对象基础上的扩充,首先抽象类从字面解释就是一种很难想象,在java中抽象类就是多个事物可以抽象的看成一种事物,它们都有相同的方法,可以被理解为抽象。然而接口,是对类的一种实现(后天学成的,比如狗会计算,老虎能杂耍等等)。

抽象类的概念:   针对一个事物,比如:动物类---->总体概括,之前定一个具体的动物--->(必须给他的某个功能只是声明即可),只有猫或者狗等等这些才是具体事物,Java中,如果一个类中有一个方法声明(抽象方法)抽象功能,那么这个类定义为抽象类

 
关键字:abstract  抽象的意思

抽象类的特点:抽象类不能直接实例化!(不能创建对象) 接口也不能实例化

抽象类的格式:

abstract class Animal{
public abstract void methor();
}
注释:抽象类中的方法必须被重写,否则会报错,且抽象类中可有存在非抽象方法

举例:

abstract class Animal{
	public abstract void eat() ;  
	public void method() {
		
	}
}
class Cat extends Animal{

	@Override
	public void eat() {
		System.out.println("猫吃鱼....");
	}
	
}

class Dog extends Animal{

	@Override
	public void eat() {
		System.out.println("狗吃骨头....");
	}
	
} 
public class AbstractDemo {
	public static void main(String[] args) {
		Animal a = new Cat() ;
		Animal a2 = new Dog() ;		
	}
}

关于抽象类:

   1)如果一个类中有抽象方法,那么这个类是一定是一个抽象类
  2)抽象类必须有抽象方法吗? 抽象类中不一定都是抽象方法
抽象类的子类
  1)如果子类是抽象类,没有意义,因为都不能实例化,对象如何创建
  2)子类必须是具体类,那么子类必须实现父类中的抽象功能.
抽象类的成员特点:
   成员变量:可以是变量,也是一个常量
  构造方法:可以有无参,可以有有参,作用:给对象进行初始化的.
  成员方法:可以有抽象方法,还可以有非抽象方法...
 
abstract和哪些关键字是冲突的,不能共有!
   abstract 和private
   abstract 和final

   abstract和static 

接口:体现的是事务的扩展性功能(额外动作,后天经过学习等等)
 
接口格式(标识符:类,接口:见名知意)
   interface  接口名{
   //抽象功能
   public abstract void jump() ;

   }

举例:

interface AniamlTrain{
	public abstract void jump() ;
	public abstract void speak() ;
}
interface Speak{
	public abstract void speak() ;
}
class Cat{}
class JumpCatImpl extends Cat implements AniamlTrain{

	@Override
	public void jump() {
		System.out.println("部分猫就可以跳高了...");
	}

	@Override
	public void speak() {
		System.out.println("猫开口说话了...");
	}
	
}
public class Demo {
	
	public static void main(String[] args) {
		//创建对象
		AniamlTrain at = new JumpCatImpl() ;//接口多态(实际开发中用的最多)
		at.jump();
		at.speak(); 
	}
}

  接口的特点:不能实例化
 接口的子实现类:实现类 (具体的实现类)
  class 类名+impl implements 接口名{
  }//子实现类可以继承
注释:接口的子类如果是抽象类:没有意义,不能实例化
 接口多态(最多)
 抽象类多态(比较多)

 具体对象的创建(经常会使用)

接口成员的特点:
   成员变量:是一个常量,不能更改,并且默认的修饰符public static final: (可以省略)
   构造方法:接口不存在构造方法
  成员方法:都是抽象方法,默认的修饰符:public abstract(可以省略)
 

接口和接口之间的关系:继承关系

抽象类和接口的区别:
      A) 成员的区别:
成员变量:
抽象类:既可以常量,也可以是变量
接口:只能是常量,默认的修饰符:public static final
构造方法:
抽象类:有构造方法,无参/有参 (给对象进行初始化的)
接口:没有构造方法
成员方法:
抽象类:可以有抽象方法,也可以有非抽象方法
接口:只能是抽象方法 :默认的修饰符:public abstract
     B)类与类/类与接口关系的区别:
类与类之间的关系:
继承关系,只支持单继承,不支持多继承,但是可以多层继承
类与接口的关系:
实现关系,一个类继承另一个类的同时,还可以实现多个接口...
接口与接口的关系:
是一种继承关系,既可以单继承,也可以多继承...
接口1 extends 接口2,接口3...
     C)设计原则的区别:
1)抽象类: 是有继承关系---->体现的是一种"is a"的关系   (A是B的一种或者B是A的一种)
2)接口:类和接口:实现关系--->体现的是一种" like a"的关系(扩展功能)  :跳高猫 像猫

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值