Java面向对象(2)

2019-02-25  本文已影响0人  天蓝如染

一. Java抽象类

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都可以用来描绘对象。如果一个类中没用足够的信息用来实例化对象,那么这个类就叫做抽象类。
抽象类必须被继承才能被使用。
抽象类除了不能实例化之外,类的其他功能依然存在。

1.1 抽象类

使用abstract来定义抽象类:

[可见度] abstract class 类名{

}

1.2 继承抽象类

我们能通过一般的方法来继承抽象类,即使用extends关键字:
public class Salary extends Employee

1.3 抽象方法

public abstract class Employee
{
   private String name;
   private String address;
   private int number;
   
   public abstract double computePay();
   
   //其余代码
}

声明抽象方法会造成以下两个结果:


二. Java接口(Interface)

接口在Java中是一种抽象类型,是抽象方法的集合。
一个类通过继承接口的方式,从而来继承接口的抽象方法。

接口与类相似点:
接口与类的区别

2.1 接口的声明

使用关键字interface来声明接口:

[可见度] interface 接口名 [extends 其他接口名]{
//声明变量
//抽象方法
}

接口特性
interface Animal {
   public void eat();
   public void travel();
}

2.2 接口的实现

当类实现接口的时候,类要实现接口中所有的方法。否则,类必须声明为抽象的类。
类使用implements关键字来实现接口,implements关键字放在类名后面。
...implements 接口名称 [,其他接口名称,...]

实例

public class ImpDemo implements Animal{
public void eat{
  System.out.println("can eat");
}
public void travel{
  System.out.println("can travel");
}
public static void main(String[] args){
  ImpDemo imp = new ImpDemo();
  imp.eat;
imp.travel;
}
}

2.3 接口的多继承

在Java中,类的多继承是不合法,但接口允许多继承。
在接口的多继承中extends关键字只需要使用一次,在其后跟着继承接口。 如下所示:
public interface Hockey extends Sports, Event
以上的程序片段是合法定义的子接口,与类不同的是,接口允许多继承,而 Sports及 Event 可能定义或是继承相同的方法


三. Java 多态

多态是同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个接口,使用不同的实例而执行不同操作。

多态的优点
多态存在的三个必要条件
多态的实现方式

实例

public class Test {
    public static void main(String[] args) {
      show(new Cat());  // 以 Cat 对象调用 show 方法
      show(new Dog());  // 以 Dog 对象调用 show 方法
                
      Animal a = new Cat();  // 向上转型  
      a.eat();               // 调用的是 Cat 的 eat
      Cat c = (Cat)a;        // 向下转型  
      c.work();        // 调用的是 Cat 的 work
  }  
            
    public static void show(Animal a)  {
      a.eat();  
        // 类型判断
        if (a instanceof Cat)  {  // 猫做的事情 
            Cat c = (Cat)a;  
            c.work();  
        } else if (a instanceof Dog) { // 狗做的事情 
            Dog c = (Dog)a;  
            c.work();  
        }  
    }  
}
 
abstract class Animal {  
    abstract void eat();  
}  
  
class Cat extends Animal {  
    public void eat() {  
        System.out.println("吃鱼");  
    }  
    public void work() {  
        System.out.println("抓老鼠");  
    }  
}  
  
class Dog extends Animal {  
    public void eat() {  
        System.out.println("吃骨头");  
    }  
    public void work() {  
        System.out.println("看家");  
    }  
}

运行结果

吃鱼
抓老鼠
吃骨头
看家
吃鱼
抓老鼠
上一篇下一篇

猜你喜欢

热点阅读