【JAVA知识点之多态一】

一.多态的概述及其代码体现

A.多态概述:事物存在的多种形态      

B.多态前提:

  •    要有继承关系
  •    要有方法重写
  •    要有父类引用指向子类对象
package 多态;

public class first {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
Cat c=new Cat();
c.eat();
Animal a=new Cat();
a.eat();
	}

}
class Animal{
	public void eat() {
		System.out.println("动物吃饭");
	}
}
class Cat extends Animal{
	public void eat() {
		System.out.println("猫吃饭");
	}
}

二.多态中成员访问特点

成员变量:编译看父类,运行看父类


class Demo{
public static void main(String[]args) {
	Father f=new Son();
	System.out.println(f.num);

Son s=new Son();
System.out.println(s.num);
}

}
class Father{
	int num=10;
}
class Son extends Father
{
	int num=20;
}

输出结果为10和20;

成员方法:编译看父类,运行看子类


class Demo{
public static void main(String[]args) {
	Father f=new Son();
	f.print();
}

}
class Father{
	int num=10;
	public void print() {
		System.out.println("father");
	}
}
class Son extends Father
{
	int num=20;
	public void print() {
		System.out.println("son");
	
}

输出结果为son

静态方法:编译看父类 运行看父类  只有非静态的成员方法 编译看父类 运行看子类

C.多态中向上转型和向下转型

Father f=new Son();向上转型

Son s=(son)f ;向下转型

D.多态的好处和弊端

  •   好处: 提高代码的可维护性(继承保证)
  •                提高代码的扩展性(由多态保证)
  •   弊端:不能使用子类的特有属性和行为

三.抽象类的概述及其特点

  • 抽象类和抽象方法必须用abstract关键字修饰

    abstract class 类名{ }

    public abstrsct void method( );

  • 抽象类不一定有抽象方法 有抽象方法的类一定是抽象类或者是接口
  • 抽象类的实例化:按照多态的方式 由具体的子类实例化
  • 抽象类的子类:要么是抽象类 要么重写抽象类中的所有抽象方法

B.抽象类的成员特点

  • 成员变量:既可以是变量 也可以是常量   abstract不可以修饰成员变量
  • 有构造方法 用于子类访问父类数据的初始化
  • 成员方法既可以是抽象的 也可以是非抽象的

抽象类的成员方法特性: 

  •       抽象方法:强制要求子类做的事情
  •       非抽象方法:子类继承的事情 提高代码的复用性

Abstract不能和哪些关键词共存

  •       abstract和static  因为被abstract修饰的方法没有方法体,被static修饰的可以用类名调用,但是用类名调用抽象方法是没有意义的
  •        abstract和final   因为被abstract修饰的方法强制子类重写,被final修饰的不让子类重写 互相矛盾
  •        abstract和private  因为被abstract修饰的是为了让子类看到并强制重写,被private修饰是不让子类访问 互相矛盾

四.接口的概述及其特点

接口概述

  •     狭义角度就是JAVA中的interface
  •     广义角度就是对位提供规则的都是接口

接口特点

  •      接口用关键字interface表示  
  •      类实现接口用implements表示
  •      接口不能实例化
  •      接口的子类可以是抽象类(意义不大)或具体类(重写接口中的所有抽象方法)

接口的成员特点

  • 成员变量:只能是常量 并且是静态且公开的

                 默认修饰符:public  static final 建议手动给出

  • 构造方法:接口没有构造方法
  • 成员方法:只能是抽象方法 

                  默认修饰符:public abstract 建议手动给出

类与类 接口与接口 类与接口的关系

  • 类与类:继承关系  只能单继承 可以多层继承
  • 类与接口:实现关系 可以单实现 也可以多实现,并且还可以在继承一个类的同时实现多个接口
  • 接口与接口:继承关系 可以可以单继承也可以多继承

抽象类和接口的区别

  • 成员区别:

       抽象类:

                 成员变量:可以是变量,也可以是常量

                 构造方法:有

                 成员方法:可以抽象,也可以非抽象

       接口:

                  成员变量:只可以是常量

                  成员方法:只可以是抽象

  • 关系区别:

       类与类:继承 单继承

       类与接口:实现 单继承 多实现

       接口与接口:继承 单继承 多继承

设计理念区别:

       抽象类:被继承体现的是:is a 的关系。抽象类中定义的是该继承体系的共性功能

       接口:被实现体现的是:like a 的关系。接口在定义的是该继承体系的扩展功能

猜你喜欢

转载自blog.csdn.net/qq_40777545/article/details/81275229