Java基础之多态
1.多态:
一、什么是多态
- 面向对象的三大特性:封装、继承、多态
- 多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)
- 实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。
- 多态的作用:消除类型之间的耦合关系。
- 现实中,关于多态的例子不胜枚举。比方说按下 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
说话上一篇: mysql面试题总结
下一篇: tp6 获取数据库某个表的所有字段名称