Java ——中的多态、抽象类和接口详细介绍

一、多态的概述:

1.1多态的定义:

事物存在的多种形态

1.2多态的前提:

a.要有继承关系。

b.要有方法重写。

c.要有父类引用指向在子类对象。

1.3多态中成员访问的特点

(左边)Father f=new son()(右边)

(1)成员变量:

javac看左,运行也看左;

(2)非静态成员方法:

javac看左,运行看右;

(3)静态成员方法:都是左

二、抽象类的概述:

2.1抽象类定义:

抽象就是看不懂,描述不出来的。

2.2抽象类的特点:

a.抽象类和抽象方法必须用abstract关键字修饰。

b.抽象类不一定有抽象方法,有抽象方法的类一定是抽象类或者是接口。

c.抽象类不能实例化,按照多态的方式,由具体子类实例化。

d.抽象类的子类

        要么是抽象类

        要么普通类重写抽象类中的所有抽象方法

2.3抽象类的成员特点

        a.成员变量:既可以是变量,也可以是常量。

        b.构造方法:有(用于子类访问父类数据的初始化)。

        c.成员方法:既可以是抽象的,也可以是非抽象的。

三、接口的介绍(通俗的讲接口是你师傅你得学习才能是你的,不是从谁那继承过来的)

3.1接口:

* 从狭义的角度讲就是指java中的interface

 * 从广义的角度讲对外提供规则的都是接口

3.2接口成员特点:

* 成员变量;只能是常量,并且是静态的并公共的。

  * 默认修饰符:public static final

  * 不加final也默认是常量

  * 构造方法:接口没有构造方法。

  * 成员方法:只能是抽象方法。

  * 默认修饰符:public abstract

  * 建议:自己手动给出。

四、例题有studentteacher类继承person类,学生类中部分人会跳舞,老师类部分人会唱歌。

public class demo{        //主类
	public static void main(String[] args){
		DanceStudent s=new DanceStudent("李华同学",18);
		System.out.println(s.getName()+s.getAge());
		s.eat();
		s.dance();
		System.out.println(s.getName()+s.getAge());
		SingTeacher t=new SingTeacher("小美老师",38);
		System.out.println(t.getName()+t.getAge());
		t.eat();
		t.sing();}
}
abstract class Person{          //父类
		private String name;
		private int age;
		public Person(){}       //无参构造
		public Person(String name,int age){  //有参构造
			this.name=name;
			this.age=age;}
		public void setName(String name){
			this.name=name;}
		public void setAge(int age){
			this.age=age;}
		public String getName(){
			return name;}
		public int getAge(){
			return age;}
		public abstract void eat();
}
interface danceing{
		public abstract void dance();//接口
}
interface singing{
		public abstract void sing();
}
class Student extends Person{      //子类
		public Student(){
			super();}
		public Student(String name,int age){
			super(name,age);}
		public void eat(){
			System.out.println("学生吃饭");
		}
}
class DanceStudent extends Student implements danceing{
		public DanceStudent(){
			super();}
		public DanceStudent(String name,int age){
			super(name,age);}
		public void dance(){
			System.out.println("学生跳舞");
		}
}
class Teacher extends Person{
		public Teacher(){
			super();
		}
		public Teacher(String name,int age){
			super(name,age);
		}
		public void eat()
{
			System.out.println("老师吃饭");
		}
}
class SingTeacher extends Teacher implements singing{
		public SingTeacher(){
			super();
		}
		public SingTeacher(String name,int age){
			super(name,age);
		}
		public void sing(){
			System.out.println("老师唱歌");
		}
}

你可能感兴趣的:(Java,java,jvm,开发语言)