方法
权限
- Tip:注意数据权限的设置,公开的可以直接调用,私密的要设置访问器和更新器
- private:只能在同一类中进行访问
- public:都可以进行访问
- default:同一个包下都可以进行访问
方法参数
- 引用类的传参//即地址绑定,外部改变,内部也要改变
String[] fullname = new String[] { "Homer", "Simpson" };
p.setName(fullname); `传入fullname数组`
System.out.println(p.getName()); // "Homer Simpson"
fullname[0] = "Bart"; // fullname数组的第一个元素修改为"Bart"
System.out.println(p.getName()); // "Bart"
//因为传的是数组名称,数组名称本质上是地址,所以产生了类似引用的作用,所以外部进行对数组的改变,内部的name名称会进行改变重载
- 函数名称一致,返回类型一般来说是一样的,不同在所传的参数
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 + "!");
}
}
}继承
**使用extends关键字
- Tip1:**子类子类自动获得了父类的所有字段,严禁定义与父类重名的字段!
class Person {
private String name;
private int age;
public String getName() {...}
public void setName(String name) {...}
public int getAge() {...}
public void setAge(int age) {...}
}
class Student extends Person {
// 不要重复name和age字段/方法,
// 只需要定义新增score字段/方法:
private int score;
public int getScore() { … }
public void setScore(int score) { … }
}-
扩展1:Person类定义的时候没有写extends,编译器会默认其extends Object类,并且由于Java中只能继承于一个类,所以除了Object类,其他的类都有且仅有一个父类。
-
扩展2:我们把Person称为超类(super class),父类(parent class),基类(base class),把Student称为子类(subclass),扩展类(extended class)。
Super & Protected 关键字
父类的私有属性子类无法进行访问,但是Protected的属性和方法可以。子类引用父类的字段时,可以用super.fieldName / this.fieldName
抽象类
- 概念:类中的方法只是声明了,并没有具体的执行语句,那么称这个类为抽象类,需要用abstract关键字来修饰
- 如果在父类中定义了抽象方法,那么在实现子类的时候必须对抽象方法进行复写(Override)
**Override & Overload
Override,覆写
- 概念:是父类与子类之间多态性的一种表现,它是直接覆盖了一个方法并进行重写。即:方法名,参数,返回值都一样
- 子类方法不能缩小父类方法的访问权限
- 子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)
- 存在于父类和子类之间
- 方法被定义为final不能被重写
- 被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖
Overload,重载
- 概念:Overload它是指我们可以定义一些名称相同的方法,通过定义不同的输入参数来区分这些方法。即:相当于是重新写了一个方法,类似近义词的意思
- 参数类型、个数、顺序至少有一个不相同
- 不能重载只有返回值不同的方法名
- 针对于一个类而言
- 不能通过访问权限、返回类型、抛出的异常进行重载
- 方法的异常类型和数目不会对重载造成影响