JavaSE基础部分( 四 )—— 抽象类、接口

1.抽象类:

定义:在一个类中,如果该类存在一个功能,仅仅方法声明没有方法(抽象方法),需要将该类定义为抽象类;

抽象类的特点:

1)如果一个类中有抽象方法,那么该类一定是抽象类;如果一个类是抽象类,那么该类不一定存在抽象方法;

2)抽象类不能实例化(不能创建对象);

如何实现抽象类实例化:

      抽象类需要通过子类进行实例化,父类引用指向子类对象(抽象多态);

      抽象类的父类是通过子类进行实例化,那么如果子类也是一个抽象类子类就不可以实例化,所以一定存在具体子类;

抽象类的格式:

权限修饰符   abctract  返回值类型 方法名(形式参数){   }

abstract:表示抽象,可以修饰类,也可以修饰成员方法;

abstract关键字不能和哪些关键字共用 (定义成员方法的时候):
       和final关键字冲突
       和private关键字冲突
       和static关键字冲突
       能够和public或者protected权限修饰符使用!

抽象类的成员特点:

1)成员变量:即可以定义一个常量,也可以定义为变量;

2)成员方法:即可以定义抽象类,也可以定义非抽象类;

3)构造方法:存在构造方法,即可以有参构造方法,也可以无参构造方法;

/定义抽象的父类
abstract class Animal{
	
	//具体的动物才具体的吃的功能,将吃的功能抽象(没有方法体)
	public abstract void eat() ;
	public abstract void sleep();
	
}

//创建具体的子类
//abstract class Cat extends Animal{//本身就一个子类,还抽象类,没有意义!(不能实例化)
class Cat extends Animal{//必须强制类重写父类的抽象方法
	
	public void catchMouse() {
		System.out.println("猫抓老鼠");
	}

	@Override //检查当前这个方法是否是重写父类的功能
	public void eat() {
		System.out.println("猫吃鱼");
	}

	@Override
	public void sleep() {
		System.out.println("猫趴着睡觉");
	}
}

//测试类
public class AbstractDemo {
	public static void main(String[] args) {
		//创建Animal类对象
		//Animal a = new Animal() ; //抽象类不能实例化
		
		//抽象类多态:父类引用指向子类对象
		Animal a = new Cat() ;//向上转型
		a.eat();
		a.sleep();
		//a.catchMouse();
		//向下转型
		Cat c = (Cat)a ;
		c.catchMouse();
	}
}

2.接口:

定义:体现的是事物的一种扩展性功能(本身不具备,后天经过学习得来的功能);

格式:interface  接口名(命名和类名相同){  };

接口中的注意事项:
       
 1)接口中只能定义抽象方法
         2)接口不能实例化
         3)接口如何实例化呢?
               通过接口的子实现类来进行实例化;
               格式:接口名  对象名  =new 子实现类名();    接口多态;
               接口和子实现类之间的关系:实现关系(implements)
              一般开发定义接口的子实现类的时候 , 类名: 接口名 + Impl
         4)接口的子实现类 
                  4.1)子实现类不是具体类(抽象类)---->抽象类不能实例化---存在具体的子类;
                   4.2)子实现类研究的都是具体类! 因为具体的子实现类可以实例化(创建对象!)

接口中成员特点:
        成员方法:
               只能是抽象方法,存在默认的修饰符,public abstract;
        成员变量:
               只能是常量.存在默认的修饰符:public static final;
        构造方法: 
               不存在构造方法;

类与类之间的关系:
        继承关系:extends ,
                只支持单继承,不支持多继承,但是可以多层继承!
        类与接口之间的关系:
               实现关系:implements  一个类继承另一个类的同时,可以实现多个接口
                       格式:类名 implements 接口名1,接口名2{
                                 重写每一个接口中的抽象方法
                                 } 
           接口与接口 (比如:集合框架 Collection--->List   Set)
           是继承关系,extends   (提高代码的复用性! 父接口中有的功能,子接口也具备该功能)
           既可以单继承,也可以多继承!

形式参数问题的研究(引用类型)
        方法形式参数两种类型:
                       基本数据类型:形式参数的改变对实际参数没有影响!
                       引用数据类型:形式参数的改变对实际参数有直接的影响!
                                             具体类:调用该方法,实际参数需要传递该具体类的对象!
                                             抽象类:那么调用该方法,实际参数需要传递该抽象类的子类对象! (其次)
                                             接口:那么调用该方法,实际参数需要传递该接口的子实现类对象! (使用居多)

方法返回值问题(研究的是引用数据类型)
           基本数据类型:需要什么数据类型,在调用方法的时候,就使用该具体类型去接收!
           引用数据类型:
                                返回值如果是:
                                                      具体类:需要返回该具体类的对象!
                                                      抽象类:需要返回该抽象类的子类对象! (其次)
                                                      接口:需要返回该接口的子实现类对象! (常见的)

举例:

//定义一个接口:动物跳高接口
interface AnimalJump{ //体现的一种扩展功能(额外的功能,本身事物不具备的功能)
	
	public abstract void jump() ;
}
//定义一个接口的子实现类
class CatJumpImpl implements AnimalJump{

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

//测试类
public class InterfaceDemo {

	public static void main(String[] args) {
		//创建对象
		//AnimalJump aj = new AnimalJump() ; //接口不能实例化
//		格式:接口名  对象名  =new 子实现类名();    接口多态!
		AnimalJump aj = new CatJumpImpl() ; 
		aj.jump();
	}
}


  

 

 

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值