抽象类和接口、转型、格式化输出

抽象类和接口、转型、格式化输出

【摘要】抽象类和接口、向上自动转型、向下强制转型~

前言

hi~

抽象类[abstract class]

抽象类是一种抽象数据类型,它的特点如下:

A.不能被实例化。
B.天生就是要被继承的。
C.可以有构造方法、也可以有非抽象方法,也可以没有抽象方法。

所以,抽象类的定义除了多出一个abstract关键字外,与普通类一样。
如:

1
2
3
4
5
6
public abstract class Animals {
//属性
....
//方法
public void spark(){System.out.println("$%^&##$%#$%");}
}

抽象方法

就是没有方法体的方法,它直接以;号结束,没有大括号。
它的意思是,对于这个方法的拥有类来说,“它”实现不了,故而做成抽象的。

A.拥有抽象方法的类必须是抽象类。
B.但是,抽象类不一定有抽象方法。

如:

1
2
3
public abstract void spark();

public void spark(){....}

一个子类继承了一个抽象父类后,则必须实现抽象父类的所以抽象方法。除非这个类也是抽象方法。
如:编写一个抽象父类Shape,他拥有计算面积和周长的抽象方法。

1
2
3
4
5
6
7
8
9
10
public abstract class Shape {
//属性
private String name;//

//抽象方法
public abstract double area();

public abstract double girth();
}
//然后定义子类 Triangle

接口[interface]

接口它也是一种抽象数据类型,而且是完全抽象的。
它的特点:

A.所有属性都是公开静态常量
B.所有方法都是公开抽象方法
C.没有构造
D.接口支持多重继承

如:

1
2
3
4
5
public interface 接口名 [extends  父接口1,父接口2…]{
//属性:公开静态常量 public static final

//方法:公开抽象方法 public abstract xxx xxx();
}

注:接口编译完成后,也是.class文件。

一个类实现了某个/某些接口,则这个类要实现这些接口的所有抽象方法,除非这个类也是抽象的。

接口的命名:

1.以 I 打头。
2.以 able 结尾。

如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public interface IA{
void ma();//相当于public abstract void ma();
}

public interface IB{
void mb();
}

public interface IC extends IA,IB{
void mc();
}

public interface ID{
int INDEX = 100;//public static final int INDEX = 100;
void md();
void me();
}
//
public class IC_Impl implements IC {
//
public void mc(){}
//还要实现IC接口的父接口的方法
public void ma(){};
public void mb(){};
}

//
public void ID_Impl implements ID,IB{
//
public void md(){}
public void me(){}
//
public void mb(){}
}

特殊的两类接口

1.标记接口
既没有方法也没有属性的接口。
如:

1
2
3
public interface IHaha{
//nothing
}

一个类实现这种接口是没有任何“负担”的。
如:java.io.Serializable

2.常量接口
就是只有属性而没有方法的接口。
如:

1
2
3
4
5
6
public interface Season{
int SPRING = 1;
int SUMMER = 2;
int AUTUMU = 3;
int WINTER = 4;
}

但是,这类接口从JDK5.0后就很少用了。因为有了枚举。
如:

1
2
3
public enum Season{
SPRING,SUMMER,AUTUMU,WINTER;
}

转型

Java是面向对象的语言,但是我们经常使用的基本数据类型却不是对象。所以实际使用中需要进行类型转换。

基本数据类型和对应的包装类型。

基本数据类型 包装类型
byte Byte
boolean Boolean
short Short
char Character
int Integer
long Long
float Float
double Double
1
2
3
4
5
Integer a = 123;	//自动装箱Integer a = Integer.valueOf(123);
int b = a; //自动拆箱int b = a.intValue();

Integer a = null;
int d = c; //会报空指针

格式化输出

在java中,也提供了printf方法做格式化输出。
比如:

1
2
3
4
5
6
7
8
int j = 9;
int j=12;

//想要输出i和j的值:
System.out.println("i = "+i+",j = "+j);

//使用格式化输出
System.out.printf("i = %d j = %d",i,j);

则:占位符该如何定义呢?

语法: %[index$][flag][width][.presision]conversion

conversion指的是占位符的转换字母,它有:
d 代表整数
f 代表浮点数
s 代表字符或者字符串
b 代表布尔值
t 代表时间和日期的前半部分
….
flag 标记
width 占位符宽度
.precisoin 只对浮点数有效,表示小数位
index$ 表示占位符与变量之间的对应关系,默认是一一对应的。

结束语

bye~

评论