java -多态

面向对象编程有三大特性:封装、继承、多态。
  1. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据。对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法。
  2. 继承是为了重用父类代码。同时继承也为实现多态做了铺垫。
    继承可以理解为一个对象从另一个对象获取属性的过程,他允许创建分等级层次的类。如果类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

  1. 多态是同一个行为具有多个不同表现形式或形态的能力。
    多态性是对象多种表现形式的体现。

在此片文章中,着重介绍多态。

java中存在三种多态

  1. 重载(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;
       }
}
  1. 重写(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();
    }
}
  1. 接口:不同的类在实现统一接口时,可能具有不同的实现方式,则接口变量在回调接口哦方法的时候,就可能具有多种形态。
    基于接口实现的多态
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();
    }
}

你可能感兴趣的:(java -多态)