方法重载overload()和重写override()

1.一组方法同名,但是这组同名方法参数各不相同

class Hello 
{
    public void hello() 
    {
        System.out.println("Hello, world!");
    }

    public void hello(String name) 
    {
        System.out.println("Hello, " + name + "!");
    }

    public void hello(String name, int age) 
    {
        if (age < 18) 
        {
            System.out.println("Hi, " + name + "!");
        } 
        else 
        {
            System.out.println("Hello, " + name + "!");
        }
    }
}

 注意:重载的方法一般返回值类型也是相同的,方法重载的目的在于,功能类似的方法用同一个名字,更容易记住,因此调用起来更加简单

int indexOf(char ch):根据字符的Unicode码查找

int indexOf(char ch, int fromIndex):根据字符查找,但指定起始位置

int indexOf(String str):根据字符串查找

int indexOf(String str, int fromIndex)根据字符串查找,但指定起始位置
       

String s = "Test string";

//参数是单个字符
int n1 = s.indexOf('t'); // 3

//参数是字符串
int n2 = s.indexOf("st"); //  2

//从下标为4的字符(即空格)开始进行查找
int n3 = s.indexOf("st", 4);  //  5

       

 2.override重写是说在子类中定义一个与父类方法完全相同的新方法

方法名要相同,参数列表也要相同,返回值的返回类型也要相同,任何一个不同都不算重写

class Person 
{
    public void run() 
    { 
        … 
    }
}

class Student extends Person 
{
    // 不是Override,因为参数列表不同:
    public void run(String s) 
    { 
        … 
    }

    // 不是Override,因为返回值类型不同:
    public int run() 
    { 
       … 
    }

    //是Override
    public void run() 
    { 
        … 
    }
}

加上@Override可以让编译器帮助检查是否进行了正确的重写,但是@Override不是必需的

如果一个父类不允许子类对它的某个方法进行重写,可以把该方法标记为final。用final修饰的方法不能被Override重写

class Person 
{
    protected String name;
    public final String hello() 
    {
        return "Hello, " + name;
    }
}

Student extends Person 
{
    // compile error: 不允许覆写
    @Override
    public String hello() 
    {
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_47414034/article/details/125367523