ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

0122面向对象3 多态

2021-01-22 12:03:08  阅读:103  来源: 互联网

标签:0122 子类 多态 System 面向对象 println 父类 public out


1、多态

概念:子类引用变量名指向父类对象(前提,在有子父类继承关系或者接口实现的情况下)

(1)格式

父类类型 变量名=new 子类类型();

调用 变量.方法();

(1-1)普通类多态格式定义方法

父类 变量名 = new 子类();

例:

创建一个人类

public class Person {
	public int a=1;
	public int b=2;
	public void eat(){
		System.out.println("父类吃饭");
	}
	public void sleep(){
		System.out.println("父类睡觉");
	}
}

  创建一个学生类

public class Student extends Person {
	public int a=10;
	public int c=30;
	public void eat(){
		System.out.println("子类吃饭");
	}
	public void play(){
		System.out.println("子类独有方法");
	}

}

  多态调用

public static void main(String[] args) {
		// TODO Auto-generated method stub
		Person p=new Student();
		//调用成员变量
		System.out.println(p.a);//1
		System.out.println(p.b);//2
		//System.out.println(p.c);
		//调用成员方法
		p.eat();
		p.sleep();
	}

特点:编译期如果父类中有该变量,编译成功,没有该变量,编译失败。运行期:变量值走父类变量值

总结:当调用成员变量时 编译运行都看左边 ,当调用成员方法时,子父类都有的情况下编译看左边,运行看右边,不能调用子类特有的成员变量和成员方法

(1-2抽象类多态定义)

格式:抽象类 变量名 = new 抽象类子类();

例:创建一个抽象animals类

public abstract class Animal {

  public void get() {
    System.out.println("父类吃饭");
  }

}

  创建一个普通狗类继承这个抽象动物类

public class Dog extends Animal{

  public void get(){
    System.out.println("子类吃饭");
} }

  创建一个测试类,调用get方法

public static void main(String[] args) {
		//抽象类与普通类之间
		Animal an=new Dog();
          an.get();//子类吃饭 }

  总结,跟普通类多态调用特点一样,调用方法时,调用的是子类的方法

(1-3接口间多态)

创建一个smok接口

public interface Smoking {

}

  创建一个worker类,实现smok接口

public class Woker implements Smoking{

}

  创建一个接口多态

Smoking s=new Woker();

(2)instanceof 关键字

用于判断某个对象是否属于某个数据类型

格式 :boolean  b  = 对象  instanceof  数据类型;

返回值是布尔类型

(3)多态-转型

向下转型:一个已经向上转型的子类对象可以使用强制类型转换的格式,将父类引用转为子类引用,这个过程是向下转型。

格式:子类类型 变量名 = (子类类型) 父类类型的变量;

 向上转型:当有子类对象赋值给一个父类引用时,便是向上转型,多态本身就是向上转型的过程。

使用格式:父类类型  变量名 = new 子类类型();

向下转型的前提是要在向上转型以后才能 转型,如果直接创建父类对象,无法向下转型

例:这里以上述创建的person类和student类为基础

创建一个测试类

public static void main(String[] args) {
		Person p=new Student();
		System.out.println(p instanceof Student);
		System.out.println(p instanceof Person);
		System.out.println(p instanceof Teacher);
	}
public static void main(String[] args) {
		// TODO Auto-generated method stub
		Person p=new Student();
		//向下转型
		if(p instanceof Seacher){
			
                    Student stu=(Student)p;
		    System.out.println(stu.a);//10
		    System.out.println(stu.b);//2
		    System.out.println(stu.c);//30
		    stu.eat();
		    stu.sleep();
		    stu.play();
		}
		

	}        

  向下转型以后,所有调用都回到正轨

标签:0122,子类,多态,System,面向对象,println,父类,public,out
来源: https://www.cnblogs.com/-gongxue/p/14312522.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有