面向对象编程有三大特性:封装、继承、多态。
- 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据。对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法。
- 继承是为了重用父类代码。同时继承也为实现多态做了铺垫。
继承可以理解为一个对象从另一个对象获取属性的过程,他允许创建分等级层次的类。如果类A是类B的父类,而类B是类C的父类,我们也称C是A的子类,类C是从类A继承而来的。
在Java中,类的继承是单一继承,也就是说,一个子类只能所有Java的类均是由java.lang.Object类继承而来的,所以Object是所有类的祖先类,而除了Object外,所有类必须有一个父类。
通过过extends关键字可以申明一个类是继承另外一个类而来的,子类可以继承父类所有的方法和属性,但是无法使用 private(私有) 的方法和属性。
我们通过使用instanceof 操作符,来判断一个类是不是另一个类的子类,即可检验继承,也可检验实现。
System.out.println(dog instanceof Animal);
运行结果为true
- 多态是同一个行为具有多个不同表现形式或形态的能力。
多态性是对象多种表现形式的体现。
在此片文章中,着重介绍多态。
java中存在三种多态
- 重载(overload):在一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,或者是参数的个数不同,或者是参数的类型不同。
注意,方法的返回类型和参数名称不参与比较。只由参数区分,与方法的返回值无关,即返回值可以相同,也可以不同。
class A{
float add(int a,int b){
return a+b;
}
float add(long a,int b){
return a+b;
}
double add(double a,int b){
return a+b;
}
}
- 重写(override),即与继承有关的多态:重写发生在子类继承父类的情况下,方法名称,参数类型,参数个数必须均与父类方法相同,返回值类型相同或相容(为其子类),方能称之为重写。
继承的多态性指的是父类的某个方法被多个不同的子类重写时,可以各自产生自己的行为。重写若想实现多态,必须借助上转型对象这一概念。
public abstract class Animal {
public abstract void cry();
}
public class Dog extends Animal{
public void cry(){
System.out.println("狗的叫声:汪汪");
}
}
public class Cat extends Animal{
public void cry() {
System.out.println("猫的叫声:喵喵");
}
}
public class test {
public static void main(String[] args) {
Animal dog=new Dog();
dog.cry();
Animal cat=new Cat();
cat.cry();
}
}
- 接口:不同的类在实现统一接口时,可能具有不同的实现方式,则接口变量在回调接口哦方法的时候,就可能具有多种形态。
基于接口实现的多态
public interface Animal {
public void cry();
}
public class Dog implements Animal{
public void cry(){
System.out.println("狗的叫声:汪汪");
}
}
public class Cat implements Animal{
public void cry(){
System.out.println("猫的叫声:喵喵");
}
}
public class test {
public static void main(String[] args) {
Animal dog=new Dog();
dog.cry();
Animal cat=new Cat();
cat.cry();
}
}
网友评论