zoukankan      html  css  js  c++  java
  • 0122面向对象3 多态

    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();
    		}
    		
    
    	}        
    

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

  • 相关阅读:
    [SQLSERVER2005 ERROR]"附加数据库 对于 服务器“GNPC”失败"
    家用视频监控设备
    Layer Two Tunneling Protocol "L2TP"
    [转]char类型和string类型(C++,C#)
    Layer 2 Tunneling Protocol
    坚持坚持。。。
    转载几篇有用的文章
    常用的SQL语句(转载)
    python判断一个字符是否是xml合法字符
    搜索引擎推荐
  • 原文地址:https://www.cnblogs.com/-gongxue/p/14312522.html
Copyright © 2011-2022 走看看