抽象、接口

抽象类

概念:在一个类中存在一个功能,仅仅方法声明,没有方法体(抽象方法),需要将该类定义抽象类。

举例:动物 -----> 本身不是具体的(抽象的动物类)

​ 动物的吃或者睡应该定义为抽象功能 ----> 必须强制子类必须重写抽象功能!(具体的动物:猫,狗等等)

特点

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

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

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

  • ​ 3)抽象类不能实例化,如何实例化呢?

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

    ​ 抽象的父类是通过子类进行实例化,那么如果子类也是一个抽象类,子类也就不能实例化。

  • ​ 4)抽象方法的格式:没有方法体的方法

    ​ 权限修饰符 abstract 返回值类型 方法名(形式参数)

    ​ abstract:表示抽象

    ​ 可以修饰类,可以修饰方法

抽象类 必须强制子类完成的事情!(将抽象类中所有的抽象方法重写)

//定义一个Animal类
/*
class Animal{//这个必须使用抽象来定义
	
	//具体的动物才具体的吃的功能,将吃的功能抽象(没有方法体)
	public abstract void eat() ;
	
}
*/
//抽象的父类
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();
	}
}

抽象类的成员特点:

1)成员变量

​ 即可定义一个常量,也可以定义为变量

2)成员方法:

​ 既可以定义抽象方法,也可以定义非抽象方法

3)构造方法:

​ 存在构造方法,既可以有参构造也可以是无参构造方法(作用:对数据进行初始化)

抽象类成员方法特点:

  • 成员方法如果是抽象方法,必须强制类完成的事情

  • 成员方法如果是非抽象方法,子类继承父类–来提高代码的复用性!

如果一个类中没有抽象方法,那么这个类可不可以定义为抽象类呢?有什么意义?

  • 1)可以定义.
  • 2)意义就是不能直接创建对象!
    • 该抽象类中的一些功能的返回值可能就是该类本身!
    • 例如(日历类:Calendar它就是抽象类,里面的功能
    • getInstance()非抽象方法,返回值就是该类本身)

abstract关键字不能和哪些关键字共用 (定义成员方法的时候)

  • 和final关键字冲突
  • 和private关键字冲突
  • 和static关键字冲突
  • 能够和public或者protected权限修饰符使用!

接口

**接口:**体现的是事物的一种扩展性功能.(本身不具备的,经过一些学习才能具备的功能!)

​ 举例:猫和狗本身不具备的跳高的功能,经过特殊的训练—>具备这个功能!

接口如何表示:interface

接口中的注意事项:

  • 1)接口中只能定义抽象方法

  • 2)接口不能实例化

  • 3)接口如何实例化呢?

    通过接口的子实现类来进行实例化!

    **格式:**接口名 对象名 =new 子实现类名(); 接口多态!

    接口和子实现类之间的关系:实现关系(implements)

    一般开发定义接口的子实现类的时候 , 类名: 接口名 + Impl

  • 4)接口的子实现类

    4.1)子实现类不是具体类(抽象类)---->抽象类不能实例化—存在具体的子类

    4.2)子实现类研究的都是具体类! 因为具体的子实现类可以实例化(创建对象!)

package com.qianfeng_interface_03;

//定义一个接口:动物跳高接口
interface AnimalJump{ //体现的一种扩展功能(额外的功能,本身事物不具备的功能)
	
	/*public abstract void jump() {//Abstract methods do not specify a body :抽象方法中不能有方法体
		System.out.println("可以跳高了" ) ;
	}*/
	
	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();
	}
}

接口中 成员特点:

  • 成员方法:

    只能是抽象方法,存在默认的修饰符,public abstract

  • 成员变量:

    只能是常量.存在默认的修饰符:public static final

  • 构造方法:

    不存在构造方法!

类与类之间 (继承关系:extends ) :

​ 只支持单继承,不支持多继承,但是可以多层继承!

类与接口之间的关系 (实现关系)implements :

​ 一个类继承另一个类的同时,可以实现多个接口!

格式:类名 implements 接口名1,接口名2{

​ 重写每一个接口中的抽象方法

​ }

接口与接口 (比如:集合框架 Collection—>List Set)

是继承关系,extends

​ (提高代码的复用性! 父接口中有的功能,子接口也具备该功能)

​ 既可以单继承,也可以多继承!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值