面向对象核心技术

面向对象核心技术

一、抽象类与接口

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.ClassNamemethod()

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、搜索引擎及自己探索。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值