a. 是指没有名字的对象
i. 有名字的
Scanner sc = new Scanner(System.in);
ii. 匿名对象
new Scanner(System.in);
如:int age = new Scanner(System.in).nextInt();
b. 如果只使用一次,可以使用匿名对象
二. 继承(extends关键字)
a. 继承的概念
i. 继承:就是子类继承父类的属性和行为。
ii. 好处:提高代码的复用性、使类与类之间产生关系。
b. 继承的格式
i. class 父类 {
...
}
class 子类 extends 父类{
...
}
c. 继承的案例
i. 父类Human
public class Human {
private String name ;
private int age ;
public String getName(){
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
ii. 子类Teacher
public class Teacher extends Human {
// 工资
private double salary ;
// 特有方法
public void teach(){
System.out.println("老师在认真教技术!");
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
d. 子类不能继承的内容
i. 子类不能继承父类的构造方法,因为子类有自己的构造器。
ii. 父类私有成员,子类不能直接访问,可以通过getter|setter方法访问。
e. 继承后的特点-成员变量
i. 成员变量不重名
这时的访问是没有影响的
ii. 成员变量重名
1) 这时的访问是有影响的(就近原则)
iii. super访问父类成员变量
1) super代表的是父类对象的引用,(this代表的是当前对象的引用。)
2) 使用格式:
Super.父类成员变量名
f. 继承后的特点-成员方法【重点】
i. 成员方法不重名
这时的访问没有影响
ii. 成员方法重名
1) 这时的访问有影响,子类对象会优先调用自己的方法。
2) 在子类的方法中,使用super.方法名()调用父类那个同名方法
iii. 方法重写:子类中出现了与父类一模一样的方法时(除方法体),会出现覆盖效果,也称为重写或者复写。声明不变,重新实现。
iv. @Override重写注解
1) @Override:注解,重写注解校验!
2) 这个注解标记的方法,就说明这个方法必须是重写父类的方法,否则编译阶段报错。
3) 建议重写都加上这个注解,一方面可以提高代码的可读性,一方面可以防止重写出错!
4) 例如:
@Override
public void cry(){
System.out.println("喵···");
}
v. 注意事项
1) 方法重写是发生在子父类之间的关系。
2) 子类方法覆盖父类方法,必须要保证权限大于等于父类权限。(一般情况是等于)
3) 子类方法覆盖父类方法,返回值类型、函数名和参数列表都要一模一样。
g. 继承后的特点-构造器
i. 继承后子类构造器特点:子类所有构造器的第一行都会先调用父类的无参构造器,再执行自己。
ii. 子类构造器的第一行都隐含了一个super()去调用父类无参数构造器,super()可以省略不写。
h. super与this的用法
i. this.成员变量
super.成员变量
this.成员方法
super.成员方法
ii. 调用构造器
this(…)调用本类的其它构造器
super(…)调用父类的其它构造器
iii. 小结
1) 子类的每个构造方法中均有默认的super(),调用父类的空参构造。手动调用父类构造会覆盖默认的
super()。
2) Super() 和 this() 都必须是在构造方法的第一行,所以不能同时出现。
3) super(..)和this(...)是根据参数去确定调用父类哪个构造器的。
4) super(..)可以调用父类构造器,初始化继承自父类的成员变量的数据。
5) this(..)可以调用本类中的其他构造器。
iv. 继承的特点
1) java只能单继承,不支持多继承。
2) 一个类可以有多个子类。
3) 可以多层继承。
三. 抽象类
a. 抽象方法
修饰符 abstract 返回值类型 方法名 (参数列表);
b. 抽象类
i. 格式
abstract class 类名字 {
}
ii. 例如:
public abstract class Animal {
public abstract void run();
}
c. 抽象类的特征和注意事项
i. 特征:
• 得:抽象类具备了含有抽象方法的能力。
• 失:失去创建对象的能力。
ii. 注意事项
1) 抽象类不能创建对象(Java规定的!!)
2) 抽象类是有构造方法的,用于初始化类的成员变量
3) 抽象类中不一定有抽象方法,但是含有抽象方法的类一定是抽象类(一般来说抽象类中是有抽象方法)
4) 抽象类的子类必须重写抽象类的所有抽象方法,否则子类还是一个抽象类
5) 抽象类的天生作用就是做父类,为子类提供模板(存在的意义)