java基础-02

2021/5/31 14:22:32

本文主要是介绍java基础-02,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

package hjx.com.test;

import org.junit.Test;

/**
 * @author 阿牛哥
 * @date 2021/5/31
 */

/*
    理解方法的调用  对象名.f([参数])  对象属于c类
        1,编译器查看对象的声明类型和方法名.需要注意的是:也可能存在多个名字为f但参数类型不一样的方法。
            例如。可能存在方法f(int)和方法f(String).编译器会一一列举c类所有名为f的方法和超类所有名为f而且可以访问的方法
            (超类的私有方法不可访问)
        2,接下来,编译器要确定方法调用中提供的参数类型。如果在所有名为f的方法中存在一个与所提供的类型完全匹配的方法,就选择这个方法,
            这个过程成为重载解析.如果编译器找不到完全匹配的并且经过类型转换也匹配不了的,就会报告一个错误。(如果经过类型转换有一个匹配
            的,也可执行调用,但是类型转换后多个匹配的,也会报告错误  --测试没有这种情况,fload,double,Integer  假设传的是3,调用
            的情况是左边优先级搞)
            
   个人理解: C类实现D类
        D d=new D(); d.方法()  搜索的范围是D类再Object类
        C c=new C(); c.方法()   搜索的范围是先C类再D类再Object类
        D d=new C(); d.方法()   搜索的范围是D类,如果该方法被子类复写执行子类的该方法,再									搜索再Object类
        
        如果是多个类的话,根据上面三条规则摸索出实际调用的方法  有点递归的含义
 */
public class test7 {
    @Test
    public void t1(){
        Manager manager = new Manager();
        Employee employee = new Employee();
        Manager manager1 = new Employee(); //当作父类对象看,调用的方法如果是子类复写的,就执行子类的复写方法,否则就执行父类里的,调用不了子类的非复写方法

        manager.fun1(); //Manafer里的如果为 private void fun1() 会报错  原因是类外对象不能访问私有成员
        System.out.println("===");
        employee.fun1();
        System.out.println("====");
        manager1.fun1();    //Manafer里的如果为 private void fun1() 会报错  原因的子类复写的方法不能低于超类方法的访问权限
        System.out.println("=====");
        if (manager1 instanceof Manager){
            System.out.println("这是Manager");
        }
        if(manager1 instanceof Employee){
            System.out.println("这是Employee");
        }
        System.out.println("=====");
        employee.fun2(3);   //假设没有  public void fun2(int a) 就执行 public void fun2(double a)
    }
}
class Manager{
    private int id;
    private String name;

    public Manager(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public Manager() {
    }

    public void fun1(){
        System.out.println("manager...");
    }
}

class Employee extends Manager{
    public void fun1(){
        System.out.println("employee...");
    }

    public void fun2(int a){
        System.out.println("执行了第一个方法:"+a);
    }
    public void fun2(double a){
        System.out.println("执行了第二个方法:"+a);
    }
}



运行结果

manager...
===
employee...
====
employee...
=====
这是Manager
这是Employee
=====
执行了第一个方法:3

Process finished with exit code 0



这篇关于java基础-02的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程