欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java基础之多态

程序员文章站 2024-03-21 21:08:46
...

1.多态:

一、什么是多态

  1. 面向对象的三大特性:封装、继承、多态
  2. 多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)
  3. 实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。
  4. 多态的作用:消除类型之间的耦合关系。
  5. 现实中,关于多态的例子不胜枚举。比方说按下 F1键这个动作,如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;如果当前在 Word 下弹出的就是 Word 帮助;在Windows 下弹出的就是 Windows 帮助和支持。同一个事件发生在不同的对象上会产生不同的结果。

下面是多态存在的三个必要条件,要求大家做梦时都能背出来!

多态存在的三个必要条件
a、要有继承;
b、要有重写;
c、父类引用指向子类对象。

二.必须有方法重写;

package cn.itcast.arrays;

public class Demo {                                        //测试类
	public static void main(String[] args) {
		Animal a = new Cat();                     //父类引用指向子类对象
		a.eat();                                   //父类对象调用子类方法
	}
} 
class Animal{                                            //父类:动物类
	private String name;                            //父类中的属性
	private int age;

	public Animal() {                               //空参构造
		super();
	}

	public Animal(String name, int age) {           //有参构造方法
		super();
		this.name = name;
		this.age = age;
	}

	public String getName() {                      // 父类中的set,get方法
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
	public void eat(){                            //父类中的方法
		system.out.println("吃");
	}
		
}
class Cat extends Animal {                        //子类Cat,继承于父类:动物类
	                                          //子类继承了父类的属性, 
	                                            
	public Cat() {                            //子类的空参构造方法
	}

	public Cat(String name, int age) {        //子类Cat的构造方法
		super(name, age);
	}

	@Override
	public void eat(){                        //子类重写父类中的方法
		System.out.println("猫吃鱼");
	}
}

 定义了一个父类Animal,其中构成有属性,构造方法, 子类Cat继承于Animal类,属性,构造方法,以及重写父类Animal中eat的方法,然后在创建对象:

    Animal a = new Cat();    父类引用指向子类对象

    a.eat();                对象调用子类中重写了以后的eat();方法

输出结果就是 :  "猫吃鱼"


2.接口

1、接口是Java中最终要的概念,接口可以理解为一种特殊的类,里面全部是由全局常量和公共的抽象方法所组成。

2、接口的格式:

  interface Name{

    全局常量

    抽象方法

    }

3、接口的实现也必须通过子类,使用关键字implements,而且接口是可以多实现的。

4、一个子类可以同时继承抽象类和实现接口。

5、一个接口不能继承一个抽象类,但是却可以通过extends关键字同时继承多个接口,实现接口的多继承

接口中的成员特点:

成员变量:

只能是final 修饰的常量

默认修饰符: public static final

接口的实现如下:

public class Demo2 {  
	  
    public static void main(String [] args){  
       // Inter2 i = new Inter2();  接口是不允许实例化,也就是说接口不能创建对象
        A a = new A();  
        a.tell();  
        System.out.println(Inter1.AGE);  
        a.say();  
    }  
  
}  

interface Inter1{  

    public static final int AGE = 100;  	     //全局公共常量(接口中的常量是不可更改的,用public static final修饰) 
  
    public abstract void tell();  		    //接口Inter1中的抽象方法
}  
  
interface Inter2{  								
  
    public abstract void say();  			//接口中的抽象方法	
}  
  
  
abstract class Ab{  				    //抽象类
    public abstract void print();  		    //抽象类中的抽象方法(抽象方法必须是放在抽象类中的)
}      
  
class A extends Ab implements Inter1,Inter2{         //创建A类继承于Ab类  并实现了接口Inter1和Inter2
    @Override  
    public void tell() {  					//重写了Inter1中的tell()方法
    	System.out.println("告诉");
    }  
  
    @Override  
    public void say() {  					//重写了Inter2中的say()方法
    	System.out.println("说话");
    }  
  
    @Override  
    public void print() {  					//重写了父类Ab中的print()方法
          System.out.println("输出");
    }  
}  

创建了接口 Inter1 和 Inter2 两个接口  以及一个抽象类Ab 和一个子类A继承于父类Ab类

然后接口Inter1 中有tell()抽象方法 ;

接口Inter2 中有say()方法;

父类Ab类中有抽象方法print();

子类A继承于父类Ab并实现了接口Inter1和Inter;

        所以A类中重写了父类Ab和接口Inter1 和 Inter 2 中的方法    

        然后父类引用指向子类对象.并调用了子类中重写了的方法,

所以输出的结果就是        

告诉

100

说话