1.类和对象:

对象的定义:广义地说,任何可以被 理解,被 感知 的东西都可以称之为对象。

类的定义:一般我们把一组具有类似属性和行为的对象叫做类。

笔者认为,类是一组具有相似性质的对象的集合,是将对象的本质属性抽象出来的概念,而集合是类在不同情景下的具体体现,是类的一种实例。

由于JAVA是一种纯面向对象的编程语言,如果对每一种对象都单独描述属性和行为,其工作量未免太大。特别在一些大型工程上,类的概念大大减小了工作量。

2.封装

封装是一种将对象的对外接口和内部实现区分开来的机制(顾名思义,就是把你想要的东西打包)。如果从对象的外部视角去 “观察” 某个对象,我可以只在乎它的功能作用和特性,不必考虑其内部实现的步骤(而这一点恰恰是面向过程设计程序的关键,如C语言等),该对象的内部信息被隐藏起来,仅留一个接口与外界联系。当然,与此同时也增加了访问对象的难度

封装的实现:

(1) 需要修改属性的访问控制符(修改为private);
(2) 创建getter/setter方法(用于属性的读写);
(3)在getter/setter方法中加入属性控制语句(用于判断属性值的合法性);

3.继承

实际编程中,类和类不一定都是孤立的,类和类之间也可能存在某种内在联系。如果若干个类之间有公共的特性,则可以将共同的部分抽取出来,定义到一个公共的类中(称之为父类或者基类),其他的类则可以与之形成继承关系(称之为子类或者派生类)。并且子类一般比父类具有更多的信息和属性,功能一般也更加强大(不妨把子类看作父类的Pro.Plus.Max.+(hhhhh稍微吐个槽))。继承不但减少了代码量,能很好的提高复用率,并且是实现多态的前提。

继承的实现:
  继承通过extends关键字实现
  格式:class 子类 extends 父类 { }

注意:(1)JAVA是单继承,即每个子类仅有一个父类。例如:suv类可以看作机动车类的子类,但不能看作非机动车的子类。

(2)JAVA允许多重继承,即父类和子类的概念是相对的,在A—>B—>C(—>表示前者是后者的父类)中,B既是A的子类,又是C的父类。例如:SUV类是机动车类的子类,同时又是路虎类的父类。(一般不建议继承层数超过三层)

(3)子类可以直接访问父类的非私有化成员变量,访问父类的私有化成员变量可以使用super.get()方法。

(4)继承某个类时要存在从属关系,不要仅仅为了获取某个功能而贸然继承。(即使wjl再有钱也是王校长的爸爸,而不是你爸爸(手动狗头))

(5)JAVA的继承与生理学上的继承最大的区别在于时间连续性。客观上说,生理上的 “子” 在诞生之后不会因为随着 “父” 的改变而发生改变,不存在耦合关系。而JAVA程序设计中,改变了父类,子类也会随时发生改变,具有某种耦合效应

4.多态

在介绍多态之前不得不引入重写(overriding)的概念,即对于父类中定义的一个成员方法,在子类中又重新定义一遍,虽然接口完全相同,但是实现的功能不同。

多态的定义:所谓多态,指的是一个引用变量根据它所指向的对象类型来改变其行为的能力。这允许不同子类的多个对象可被视为同一个父类的对象,却又能根据各个对象所属的子类自动选择合适的成员函数执行。

多态的三要素

1.必须有父类和子类,具有继承或者实现继承的能力
2.子类必须重写父类的方法
3.父类的引用变量指向子类的对象

多态具有一个重要的性质:合而不同

//举个栗子吧
class Animal {
    public void sound(){
        System.out.println("动物的叫声");
    }
}

class Cat extends Animal{
    public void sound(){            //重写
        System.out.println("喵喵");
    }
}

class Dog extends Animal{
    public void sound() {			//重写
        System.out.println("汪汪");
    }
}

class Duck extends Animal{
    public void sound(){			//重写
        System.out.println("呱呱");
    }
}

public class MainClass {
    public static void main(String [] args){
        Dog dog = new Dog();
        Cat cat = new Cat();
        Duck duck = new Duck();
        dog.sound();
        cat.sound();
        duck.sound();
    }
}

以上程序在编写代码时将各种子类对象按照相同类型来处理,以简化代码;而在运行时,分别绑定到各自不同的实现函数。这就是多态。

5.异常处理

在我们编写程序时,出现BUG是最正常不过的事了,程序员大多都有“一杯咖啡一根烟,一个BUG找一天”的悲惨经历。在软件开发中,产品的可靠性和安全性是至关重要的,所以我们需要对于异常进行处理。

所谓异常,指的是某个非正常的事情发生,妨碍了程序的正常运行。

在程序中可能会出现好多次异常,而每次异常都可以看成是一个对象,并且异常有不同的类型,故每次异常都可以看成某个类的一个对象。

JAVA在处理异常的方法主要包括两个环节:
1.抛出(throw)异常,即创建一个相应类型的异常对象,其中包含一些有用的信息,然后将它抛给运行时的系统。
2.捕获(catch)异常,即接收并处理该异常。

//再来举个栗子吧
public class Example01 {
    public static void main(String [] args){
        int [] a = {1,2,3,4};
        try{
            for(int i =1;i<=4;i++)
                System.out.println(a[i]);
            System.out.println("我能执行到吗");
        }catch(IndexOutOfBoundsException e) {
            System.out.println("出现了数组越界错误!");
        }
    }
}

上述代码运行结果截图如下:

与 java类似的语言 与java语言相似的语言_多态


显然这里存在数组下标越界的问题,所以产生一个异常,所以在异常之后的代码就不再执行了,所以并没有打印“我能执行到吗”。接着程序跳转到catch寻找相应的处理方法。这里正好有一个数组下标越界的错误,于是执行异常处理代码,打印"出现了数组越界错误!"