面向对象核心技术
一、抽象类与接口
1、抽象类
抽象类简单来说就是表征一个对象是什么一种属性。实例化即建立一个类的对象,而所谓抽象是指它之下没有可以实例化的对象。
public abstract class ClassName {
public void method()
{
System.out.println("test");
}
public static void main(String[] args)
{
ClassName a=new ClassName();
a.method();
}
}
报错信息:
j
a
v
a
:
c
o
m
.
t
e
s
t
.
C
l
a
s
s
N
a
m
e
是
抽
象
的
;
无
法
实
例
化
java: com.test.ClassName是抽象的; 无法实例化
java:com.test.ClassName是抽象的;无法实例化
public abstract class ClassName {
public static void method()
{
System.out.println("test");
}
public static void main(String[] args)
{
method();
}
}
运行结果:
t
e
s
t
test
test 抽象类不能实例化,静态方法不需要实例化,将Java的这两个特性相结合有助于理解本段代码。
2、抽象方法
public abstract class ClassName {
public abstract void method();
public static void main(String[] args){}
}
只有声明没有实例的方法称为抽象方法,抽象方法只能在抽象类中使用,不然会产生以下错误。
报错信息:
j
a
v
a
:
c
o
m
.
t
e
s
t
.
C
l
a
s
s
N
a
m
e
不
是
抽
象
的
,
并
且
未
覆
盖
c
o
m
.
t
e
s
t
.
C
l
a
s
s
N
a
m
e
中
的
抽
象
方
法
m
e
t
h
o
d
(
)
java: com.test.ClassName不是抽象的, 并且未覆盖com.test.ClassName中的抽象方法method()
java:com.test.ClassName不是抽象的,并且未覆盖com.test.ClassName中的抽象方法method()
3、继承抽象类
public abstract class ClassName {
public void method()
{
System.out.println("common method");
}
public abstract void method_abstract();
}
public class ClassNames extends ClassName{
@Override
public void method_abstract()
{
System.out.println("abstract method");
}
public static void main(String[] args)
{
}
}
语法特点:子类重写父类的抽象方法。
4、接口
接口都没有方法实现,并且抽象程度更高。
public interface ClassName {
public void method();
public static void main(String[] args){}
}
public class ClassNames implements ClassName{
@Override
public void method()
{
System.out.println("method");
}
public static void main(String[] args){}
}
二、异常处理
1、异常
分类 | 特点 | 可否忽略 | 实例 |
---|
检查性异常 | 程序员无法预见其是否出现 | 否 | 用户输入了非法数据;要打开的文件不存在 | 运行时异常 | 可能被程序员避免的异常 | 是 | | 错误 | 脱离程序员控制的问题 | 是 | 内存溢出 |
此外网络通信时连接中断也是常见的异常。
2、异常分类
异常(Throwable)包括Error和Exception.
Exception下的异常分为两大类,分别是Runtime异常和非Runtime异常。
Runtime异常:数组下标越界异常,空指针异常,对象类型强制转换异常,以及数组存储异常。
非Runtime异常(检查异常):IOException,SqlException
3、try-catch格式
public class temp {
public static void main(String[] args)
{
try
{
int[] a=new int[3];
for(int i=0;i<4;i++)
{
System.out.println(a[i]);
}
}
catch(IndexOutOfBoundsException a)
{
System.out.println("IndexOutOfBoundsException");
}
}
}
运行结果:
0
,
0
,
0
,
I
n
d
e
x
O
u
t
O
f
B
o
u
n
d
s
E
x
c
e
p
t
i
o
n
0, 0, 0, IndexOutOfBoundsException
0,0,0,IndexOutOfBoundsException
4、try-catch-finally格式
在3中可增添这样一行代码:
finally {
System.out.println("finish printIn process");
}
运行结果增加finish printIn process,除此之外没有其他变化。
5、throws/throw异常
public class temp {
public static void main(String[] args)
{
try
{
int[] a=new int[3];
for(int i=0;i<4;i++)
{
if(i==3)
{
throw new IndexOutOfBoundsException("数组越界异常");
}
System.out.println(a[i]);
}
}
catch(IndexOutOfBoundsException a)
{
System.out.println("IndexOutOfBoundsException");
}
}
}
6、自定义异常
class MyException extends Exception {
MyException(String s) {
super(s);
}
}
三、实例
1、创建 Shape(图形)类,该类中有一个计算面积的方法。圆形和矩形都继承自图形类,输出圆形和矩形的面积。
public abstract class Shape {
double a=10.0;
public abstract void size();
}
public class Circle extends Shape{
@Override
public void size() {
System.out.println("S="+Math.PI*a*a);
}
public static void main(String[] args)
{
Shape m=new Circle();
m.size();
}
}
public class Square extends Shape{
@Override
public void size() {
System.out.println("S="+a*a);
}
public static void main(String[] args)
{
Shape n=new Square();
n.size();
}
}
2、创建工厂类,工厂类中有一个抽象的生产方法,创建汽车厂和鞋厂类,重写工厂类中的抽象生产方法,输出汽车厂生产的是汽车,鞋厂生产的是鞋。
public abstract class Factory {
public abstract void process();
}
public class Car extends Factory{
@Override
public void process() {
System.out.println("汽车厂生产的是汽车");
}
public static void main(String[] args)
{
Factory m=new Car();
m.process();
}
}
public class Shoes extends Factory{
@Override
public void process() {
System.out.println("鞋厂生产的是鞋");
}
public static void main(String[] args)
{
Factory m=new Shoes();
m.process();
}
}
参考资料:
1、https://github.com/datawhalechina/team-learning-program/blob/master/Java/7.%E6%8A%BD%E8%B1%A1%E7%B1%BB%E4%B8%8E%E6%8E%A5%E5%8F%A3.md
2、https://github.com/datawhalechina/team-learning-program/blob/master/Java/8.%20%E5%BC%82%E5%B8%B8%E5%A4%84%E7%90%86.md
3、https://github.com/datawhalechina/team-learning-program/blob/master/Java/%E7%BB%83%E4%B9%A0%E9%A2%98%EF%BC%9A%E6%8A%BD%E8%B1%A1%E7%B1%BB%E4%B8%8E%E6%8E%A5%E5%8F%A3.md(实例出处)
4、搜索引擎及自己探索。
|