java的四个基本特征是很容易开始面试的点,如果问的是三大属性,那么是封装,多态,继承,如果问的是四大特征,那么分别是抽象,封装,多态,继承。
1.抽象
抽象:将相同的类的共同特征总结出来,构造成类的过程。包括数据抽象以及行为抽象。数据抽象变成类的成员变量,行为抽象变成类的成员函数。抽象只关心成员变量以及成员函数,并不关系具体的实现细节。
下面是Person.class,表示与人类相关的数据以及各种活动,只列举部分的属性以及行为。
public class Person{ // 年龄(数据抽象) public int age; // 名字(数据抽象) public String name; public Person(){ } public Person(int age,String name){ this.age = age; = name; } // 吃东西(行为抽象) public void eat(){ System.out.println("I am eating"); } // 走路(行为抽象) public void walk(){ System.out.println("I am walking"); }}
创建一个人类的对象:
Person person = new Person(18,"张三");
上面的代码仅仅用来表示简单的抽象,将人共同的属性以及共同的行为抽象出来。
2.继承
继承是从已有的类得到继承信息创建新的类的过程,继承可以表示为 is-a 关系 。比如动物就是父类或者说基类。那么动物有很多种,比如小狗,小猫,它们有很多共同的属性,它们都是动物。那么表现在代码里就是,它们可以直接把行为或者数据继承过来。
动物类:
public class Animal { public int age = 0; public String name = "默认名字"; public Animal(){} public Animal(int age,String name){ age = this.age; name = ; } public void eat(){ System.out.println("I am animal,I am eating"); } public void sleep(){ System.out.println("I am a dog ,I am sleeping"); }}
继承动物类的Dog类:
public class Dog extends Animal{ public Dog(){ super(); } public Dog(int age, String name) { super(age, name); } public void eat(){ System.out.println("I am a dog ,I am eating"); }}
测试类:
public class Test { public static void main(String []args){ Animal animal = new Animal(); animal.eat(); Dog dog = new Dog(); System.out.println("我的默认数据继承自父类:"+dog.age+" "+); dog.sleep(); dog.eat(); }}
结果如下:
3.封装
封装其实可以理解为:“装”与“封”,就是把数据以及操作方法封装在函数里/类,然后再装起来。也就是把数据以及操作数据的方法绑定起来,对外界提供已经定义好的接口进行访问。面向对象的本质就是将现实世界描绘成一系列的完全自治,封闭的对象。可以理解为我们无论内部实现有多复杂,使用者可以完全不用理,只需要知道怎么使用就可以了。
举个小例子:下面是学生的类,study的方法其实就是一种封装,外界要是需要学生学习,那就直接调用study()
方法即可,不需要知道我如何实现学习这个方法。
public class Student implements Serializable { public String name; public String number; public int age; public Student() { } public Student(String name, String number, int age) { = name; this.number = number; this.age = age; } public void study(){ System.out.println("我是学生"+name+",我今年"+age+"岁。"); //内部可能有很复杂的操作,但是调用者只需要关注如何调用即可 }}
4.多态
多态可以大概分为两种方式:方法重载与方法重写。
- 方法重载(Overload):编译时的多态性(也就是前绑定),方法可以根据不同参数类型进行不同的调用,方法名字一致。
- 方法重写(Override):运行时的多态(也称为后绑定)。
- 要实现方法重写需要做:1.方法重写,也就是子类继承父类并重写了父类已经有的方法。 2.用父类型引用来引用子类型对象,这样可以实现调用同样的方法会根据子类对象的不同表示出不一样的行为。
在项目中对多态的使用:比如购物系统,销售者与购买者都可以登录系统,有相同的Login界面,但是登录之后会到达不一样的界面,之后的操作也会根据对象的不同进行不一样的操作。(总结自一份阿里面经,但是没有找到出处)