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