面向对象三大特性 封装,继承,多态。
1.封装
属性的封装和方法的封装。把属性定义为私有的, get(),set()方法。 好处是信息隐藏和模块化,提高安全性。封装的主要作用在于对外隐藏内 部实现细节,增强程序的安全性。
Java支持4种不同的访问权限。
默认的,也称为default,在同一包内可见,不使用任何修饰符。
私有的,以private修饰符指定,在同一类内可见。
共有的,以public修饰符指定,对所有类可见。
受保护的,以protected修饰符指定,对同一包内的类和所有子类可见。
2.继承
java通过继承创建分等级层次的类,可以理解为一个对象从另一个对象获取属性的过程。
类的继承是单一继承,也就是说,一个子类只能拥有一个父类
下面的做法是不合法的:
public class extends Animal, Mammal{}
但是我们可以用多继承接口来实现, 如:
public class Apple extends Fruit implements Fruit1, Fruit2{}
继承中最常使用的两个关键字是extends(用于基本类和抽象类)和implements(用于接口)。
注意:子类拥有父类所有的成员变量,但对于父类private的成员变量却没有访问权限,这保障了父类的封装性。
下面是使用关键字extends实现继承。
public class Animal{
}
public class Mammal extends Animal{
}
public class Reptile extends Animal{
}
public class Dog extends Mammal{
}
通过使用关键字extends,子类可以继承父类所有的方法和属性,但是无法使用 private(私有) 的方法和属性。
我们通过使用instanceof 操作符能够确定一个对象是另一个对象的一个分类。
3.多态
当同一个操作作用在不同对象时,会产生不同的结果。
有 2 种方式来实现多态,一种是编译时多态,另外一种是运行时多态;编译时多态是通过方法的重载来实现的,运行时多态是通过方法的重写来实现的。 方法的重载,指的是同一个类中有多个同名的方法,但这些方法有着不同 的参数。在编译时就可以确定到底调用哪个方法。 方法的重写,子类重写父类中的方法。父类的引用变量不仅可以指向父类 的实例对象,还可以指向子类的实例对象。当父类的引用指向子类的对象时, 只有在运行时才能确定调用哪个方法。 特别注意:只有类中的方法才有多态的概念,类中成员变量没有多态的概念。
Override(覆盖、重写)和 Overload(重载)的区别。
重载和覆盖是 java 多态性的不同表现方式。 重载是在一个类中多态性的一种表现,是指在一个类中定义了多个同名的 方法,但是他们有不同的参数个数或有不同的参数类型。 在使用重载时要注意以下几点:
1.重载只能通过不同的方法参数来区分。例如不同的参数类型,不同的 参数个数,不同的参数顺序。
2.不能通过访问权限、返回类型、抛出的异常进行重载。
覆盖是指子类函数覆盖父类中的函数。 在覆盖时要注意以下几点(重点!!):
1.覆盖的方法的函数名和参数必须要和被覆盖的方法的函数名和参数完全匹配,才能达到覆盖的效果;
2.覆盖的方法的返回值必须和被覆盖的方法的返回值类型一致;
3.覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者 是其子类;
4.被覆盖的方法不能为 private,否则在其子类中只是新定义了一个方法, 并没有对其进行覆盖。
5. 子类函数的访问修饰权限要大于等于父类的 (public>protected>default>private) 。(重要!!!)
特别注意:Java 中,子类无法覆盖父类的 static 方法或 private 方法。