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);
}
}
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 class
interface
组成
常量、变量、抽象方法、普通方法、构造方法
全局常量、抽象方法、普通方法、静态方法
权限
各种权限
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());
}
}