super:
this和super用法类似,this代表本类引用,super代表父类引用
this和super的对比使用
访问成员变量
this.成员变量 ……………… super.成员变量
访问构造方法:
this():访问本类无参构造 …………this(参数列表) 访问本类带参构造
super():访问父类无参构造 …………super(参数列表) 访问父类带参构造
访问成员方法:
this.成员方法();访问本类成员方法
super.成员方法(); 访问父类成员方法
this和super的区别
this代表当前对象,super可以理解为父类对象
既然super理解为一个父类对象,那么super应该可以用访问父类的成员
this的主要作用是用来帮我们初始化本类成员(当外界传入的变量名和本类变量名相同的时候)
任何一个本类成员默认都隐含一个this
任何一个本类的成员同时也可以使用super访问父类的成员
super特点:
1.任何一个构造方法都默认会在构造方法的第一句上写上super(),访问父类的无参构造方法
Constructor call must be the first statement in a constructor
2.super和this访问构造方法必须出现在构造方法的第一句
this和super在访问构造方法的时候,二者不能共存
3.static静态的上下文中不能出现this和super
4.super的主要作用是帮助我们初始化父类继承过来的成员
package com.sxt.superdemo;
public class SuperDemo01 {
public static void main(String[] args) {
Zi zi = new Zi(20);
Fu f = new Fu();
}
}
class Fu /*extends Object */{
public int num;
public int x;
public int y;
public Fu() {
super();
System.out.println("我是父类无参构造方法");
}
public Fu(int num) {
this.num = num;
}
public Fu(int num, int x, int y) {
this.num = num;
this.x = x;
this.y = y;
}
}
class Zi extends Fu{
public int num2;
public Zi() {
super();
System.out.println("我是子类无参构造方法");
}
public Zi(int num2) {
super();
this.num2 = num2;
}
public Zi(int num, int x, int y, int num2) {
super(num, x, y);
this.num2 = num2;
}
}
访问权限修饰符:
访问权限修饰符总结:
1.访问权限修饰符有四个
2.访问权限修饰符可以修饰成员变量,成员方法,还可以修饰类(只有public可以)
在这里需要注意,其实protected/private也可以修饰类,但是必须是内部类
四个修饰符的特点:
1.public修饰的成员对一切类可见
2.protected修饰的成员对子类可见
3.default修饰的成员仅对同包下可见
4.private修饰的成员仅对本类可见
访问权限修饰符的宽严关系
public > protected > default > private
Java当中封装就是通过访问权限修饰符来实现的
封装: 就是屏蔽内部的成员,而屏蔽内部的成员是通过访问权限修饰符来控制的
方法重写:
为什么方法重写:
父类的功能不能够满足子类的需求,需要方法重写
方法重写的概念:覆盖父类的方法,实现自己所持有的功能
方法重写的特点:
1.发生在具有子父类关系的两个类中
2.方法名称相同
3.参数列表完全相同(参数的个数,顺序,类型都一样)
4.返回值类型可以相同或者是其子类
5.访问权限修饰符不能够严于父类
6.子类声明的异常不能都被扩大
访问权限修饰符的宽严关系
public > protected > default > private
方法重写的注意事项:
1.私有修饰的方法去不能够被重写【因为私有修饰符的方法不能够被继承】
2.构造方法不能够被重写
3.子类重写父类方法时,访问权限修饰不能够严于父类
4.子类声明的异常不能够被扩大
5.重载和重写的区别?
重载的特点:发生在同一个类中,方法名相同,参数列表不同
重写的特点:如上所示
6.重写是多态的必要特点
package com.sxt.overridedemo;
import org.omg.PortableInterceptor.AdapterManagerIdHelper;
public class OverrideDemo01 {
}
class LaoWang {
protected String name;
protected int age;
protected String address;
public void sing() {
System.out.println("唱山路十八弯");
}
public void dance() throws RuntimeException {
System.out.println("老年DISCO");
}
public XiaoWang method() {
return new XiaoWang();
}
}
class XiaoWang extends LaoWang {
public void sing(int x) {
System.out.println("上中国好声音");
}
public void dance() throws NullPointerException {
System.out.println("街舞");
}
public XiaoWang method() {
return new XiaoWang();
}
}