Java学习笔记近期小结
面向对象的设计
1.super与this关键字的使用:
this:
this修饰属性和方法,理解为当前对象;
public class Person{
private String name;
public Person(String name){
this.name = name;
}
public void setName(String name){
this.name = name;
}
}
如上面程序所显示,需要通过构造器或方法对属性进行赋值时,所传形参与类中定义的属性名一样时,就需要使用 this.属性 和 this.方法 的方式对属性进行赋值。
this还可以修饰构造器:
1.我们在类的构造器中,可以显式的使用“this(形参列表)”,调用本类中其他的构造器。
2.不能通过this直接或者间接的调用自己本身的构造器,这样会形成循环。
3.this调用构造器必须声明在当前构造器的首行。依次,构造器内只能有一个this构造器调用。
public class Person{
private String name;
public Person(){
}
public Person(String name){
this();
this.name = name;
}
}
上面Person类中的有参构造器就是调用了无参构造器,如果每一个构造器的声明都有一部分相同的代码需要写的话,可以把这部分代码放在其中一个构造器中,并且在声明其他构造器时调用这个构造器就可以免去这部分冗余的代码。
super
1.对于属性来说,当我们在子类中定义了与父类同名的属性时,想调用父类中被声明的属性时,必须显式的使用 ”super.属性“ 的方式声明属性。
2.对于方法来说,当我们在子类中重写了父类中的方法时,这时要想调用父类中的方法就必须显式的使用“super.方法”的方法调用此方法。
public class superTest{
public static void main(String[] args){
Student s1 = new Student();
s1.eat();
s1.show();
}
}
class Person{
String name = "小米";//大名
public void eat(){
System.out.println("吃饭");
}
}
class Student extends Person{
private String name = "xiaomi";//外号
public void eat(){
System.out.println("chifan");
}
public void show() {
eat();
super.eat();
System.out.println(this.name);
System.out.println(super.name);
}
}
2.重写与多态性
重写: 子类继承父类以后,可以对父类中同名参数的方法进行覆盖。
应用:重写以后,当子类创建父类对象以后,通过子类调用父类中的同名参数或者方法时,实际执行的是子类重写父类的方法。
重写的规定:
1.子类重写的方法名和形参列表与父类被重写的方法的方法名和形参列表相同;
2.子类重写的方法的权限修饰符不小于父类被重写的方法的权限修饰符;
特殊情况:子类不能重写父类中声明为private权限的方法。
3.返回值类型
若父类被重写方法无返回值,子类重写方法也应无返回值。
父类被重写方法返回值类型为A类,则子类重写的方法的返回值类型可为A类或A类的子类。
对于返回值为基本数据类型的父类方法来说,其子类重写的方法的返回值类型应与父类一致
多态性:父类的引用指向子类的对象。
多态性的使用:虚拟方法调用
在编译期,调用父类中声明的方法,在执行期,实际执行的是子类重写父类的方法。
使用的前提:1.类的继承关系;2.方法的重写。
多态性只适用于方法,不适用于属性。