Java抽象类与接口的学习

本文详细介绍了Java编程中的核心概念:抽象类的定义与使用,包括其相关说明;包装类的装箱与拆箱操作及数据类型转换;接口的定义与实现,以及如何实现多个接口;最后讲解了泛型的基本概念及其通配符的使用。通过实例展示了这些概念在实际编程中的应用。
摘要由CSDN通过智能技术生成


前言

学习抽象类与接口可以有效拆分大型系统,避免产生耦合问题。


一、抽象类

抽象类定义

  • 抽象类与普通类相比增加的就是抽象方法的定义,同时抽象类在使用时要求必须被子类所继承,并且子类必须覆写全部抽象方法。
  • 抽象类需要使用abstract class进行定义,并且在一个抽象类中也可以利用abstract关键字定义若干个抽象方法,这样抽象类的子类就必须在继承抽象类时强制覆写全部抽象方法。
  • 抽象类必须提供子类,子类使用extends继承一个抽象类。抽象类的子类一定要覆写抽象类中的全部抽象方法。抽象类的对象实例化可以利用对象多态性通过子类向上转型的方式完成。
abstract class Message{
	private String type;
	public abstract String getConnectInfo();
	public void setType(String type) {
		this.type=type;
	}
	public String getType() {
		return this.type;
	}
}
class DatabaseMessage extends Message{
	@Override
	public String getConnectInfo() {
		return "hi"+super.getType();
	}
}
public class Java1 {

	public static void main(String[] args) {
		// TODO 抽象类
		Message msg=new DatabaseMessage();
		msg.setType(" Yang");
		System.out.println(msg.getConnectInfo());
	}

}

抽象类相关说明

  • 抽象类必须由子类继承,所以在定义是不允许使用final关键字定义抽象类或抽象方法。
  • 抽象类可以定义成员属性与普通方法,为了可以为抽象类中的成员属性初始化,可以在抽象类中提供构造方法。
  • 抽象类中可以没有抽象方法,但是即使没有抽象方法,也不能直接使用关键字new进行实例化。
  • 抽象类可以提供static方法,该方法不受抽象类实例化对象的限制。

二、包装类

装箱与拆箱

class Int{
	private int data;
	public Int(int data) {
		this.data=data;
	}
	public int intValue() {
		return this.data;
	}
}
public class Java2 {

	public static void main(String[] args) {
		// TODO 包装类
		Object obj=new Int(10);//装箱操作,将基本数据类型保存在包装类中
		int x=((Int)obj).intValue();//拆箱,从包装类对象中获取基本数据类型
		System.out.println(x*2);

	}

}
  • 对于包装类可以分成两种类型,对象型包装类(Object直接子类):Boolean、Character。数值型包装类(Number直接子类):byte、Short、Integer、Long、Float、Double。
方法类型描述
public byte byteValue()普通从包装中获取byte类
public short shortValue()普通从包装中获取short类
public abstract int intValue()普通从包装中获取int类
public abstract long longValue()普通从包装中获取long类
public abstract float floatValue()普通从包装中获取float类
public abstract double doubleValue()普通从包装中获取double类

数据类型转换

  • Integer类:public static int parseInt(String s)
  • Double类:public static double parseDouble(String s)
  • Boolean类:public static boolean parseBoolean(String s)

三、接口

接口定义

  • 接口属于一种特殊类,通过interface关键字定义,在接口中可以定义全局常量,抽象方法,default方法以及static方法。
interface IMessage{
	public static final String INFO="Yang";
	public abstract String getInfo();
}
class MessageImp1 implements IMessage{
	@Override
	public String getInfo() {
		return "hi,Yang";
	}
}
public class Java3 {

	public static void main(String[] args) {
		// TODO 接口
		IMessage msg=new MessageImp1();
		System.out.println(msg.getInfo());
	}

}
hi,Yang
  • 实现多个接口
interface IMessage{
	public static final String INFO="Yang";
	public abstract String getInfo();
}
interface IChannel{
	public abstract boolean connect();
}
class MessageImp1 implements IMessage,IChannel{
	@Override
	public String getInfo() {
		if(this.connect()) {
			return "hi,Yang";
		}
		return IMessage.INFO;
	}
	public boolean connect() {
		return true;
	}
}
public class Java3 {

	public static void main(String[] args) {
		// TODO 接口
		IMessage msg=new MessageImp1();
		System.out.println(msg.getInfo());
	}

}
  • 抽象类与接口的区别
区别抽象类接口
关键字abstract classinterface
组成常量、变量、抽象方法、普通方法、构造方法全局常量、抽象方法、普通方法、静态方法
权限各种权限public
关系一个抽象类可以实现多个接口接口不能继承抽象类,可以继承多接口
使用使用extends继承抽象类使用implement实现接口
设计模式模板设计模式工厂设计模式、代理设计模式
局限一个子类只能继承一个抽象类一个子类可以实现多个接口

四、泛类

泛类定义

  • 当描述的数据范围过大,出现传入数据类型错误,引发
    ClassCaseException异常。
  • 解决ClassCaseException安全隐患,类中的属性或方法的参数与返回值类型采用动态标记。
class Point<T>{
	private T x;
	private T y;
	public void setX(T x) {
		this.x=x;
	}
	public void setY(T y) {
		this.y=y;
	}
	public T getX() {
		return this.x;
	}
	public T getY() {
		return this.y;
	}
}
public class Java4 {

	public static void main(String[] args) {
		// TODO 泛类
		Point<Integer> point=new Point<Integer>();
		point.setX(10);
		point.setY(10);
		System.out.print("X:"+point.getX()+",Y:"+point.getY());

	}

}

泛类通配符

class Message5<T>{
	private T content;
	public void setContent(T content) {
		this.content=content;
	}
	public T getContent() {
		return this.content;
	}
}
public class Java5 {

	public static void main(String[] args) {
		// TODO ?
		Message5<String> msg=new Message5<String>();
		msg.setContent("Yang");
		fun(msg);

	}
	public static void fun(Message5<?> temp) {
		System.out.print(temp.getContent());
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值