1.面向对象语言三要素:抽象、封装、多态
封装:
封装应该是三个之中最容易理解的,我们将具体的人或者事物抽象成一个类,相当于将其定义为一个商品,有自己的属性和方法,其他的人和事物不能轻易观看该商品的属性和具体操作。
继承:
继承主要是针对代码复用提出的,具体是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。我们使用extends来表示两个类之间的继承关系,比如class Student extends Person,我们首先已经有了Person这个属性,它定义了名字、性别、年龄等属性还有吃饭、运动等方法,而Student(学生)作为毫无疑问也具有人的所有属性(当然不排除现在有的学生活得不像人了),所以只需要继承person,就可以轻松继承人的所有方法和属性而不需要自己重新定义,这个时候我们称Person为父类,Student为子类。
另外,在java中一个子类只能继承一个父类,但可以实现多个接口(接口interface用来弥补单继承的缺点的一种方式),顺便说一下接口吧,举个例子,class Student extends Person implements beauty ,在这里beauty就是我们事先定义好的一个接口,从理解上来说,学生有很多,都具有人的属性,但是不是每个学生都是好看的,也就是能继承beauty的,那些美女帅哥就是指实现了我们beauty接口的那些人,注意:接口与类不同,在接口中的所有方法都是抽象的(abstract),也就是我们只能在接口中定义一些方法和变量,但是具体的实现要在实现接口的类中让类来实现,在这个例子中就是指beauty中的beautiful()方法要在Student中实现具体的描述,比如:眼睛大啊,清纯啊,善良等等根据具体的美女来描述。
类中呢,有一种叫抽象类的,在抽象类abstract class中也是有抽象方法,很多人会不知道如何区分抽象类和接口,刚学到抽象类的时候,一定会看到这样一句话:有抽象方法的类一定是抽象类,但抽象类不一定有抽象方法。这也是抽象类和接口的一个不同点吧,接口可是一定有抽象方法的哦!
下面说说它们之间的不同:
1.设计层面:
1.类可以实现多个接口,但是只能继承一个类,抽象类也是类
2.抽象类中可以有具体的方法实现,而接口中不能有的
3.抽象类中成员变量可以有多个类型,而接口中规定只能使用public static
4.接口中不能有静态代码块及静态方法
2 语义层面:
1.接口指的是”有没有“,抽象类指的是”是不是“
接口是对行为的抽象,而抽象类指的是对类的抽象。
多态:
多态应该是三个特征中最难理解的了吧,概念是:允许不同类的对象对同一个消息做出响应。
实现多态,有二种方式,覆盖,重载。
覆盖,是指子类重新定义父类的函数的做法。
重载,是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。
举例:在Student和Person类中我们都有吃饭这个方法,
class Person{
public void eat(){
System.out.println("人吃饭”);
}
}
class Student extends Person{
@override
public void eat(){
System.out.println("学生吃饭“);
}
}
在main放方法中:
main(){
Student student=new Student();
student.eat();
Person person =new Person();
person.eat();
}
结果:学生吃饭,人吃饭,
可以看到,对eat这个方法,这两个类的调用都是可以的,但子类中重写了该方法,那执行是就会使用子类定义的方法而不是使用我们继承的eat方法。