javaSE-封装、继承、方法重写(方法覆盖)
一、方法重载Overload 和 方法重写Override 区别:
Overload:方法重载发生在同一个类中,方法名与类名相同,参数列表不同(参数的:类型、顺序、个数,只要有一个不一样就是参数列表不同)。
Override:方法重写是发生在具有继承关系的父子类之间的,重写之后方法和之前的的方法一致:方法名,参数列表,返回值类型,三个都需要一致
二、封装:
- 属性私有化(使用private 关键字进行修饰)
- 对外提供简单的操作入口(get读入、set写出)
- set方法和get方法要满足以下格式。
- set和get方法都是实例方法,不能带static。不带static的方法称为实例方法,实例方法的调用必须先new对象。
- public 返回值类型 get+属性名首字母大写(无参){
- return 属性名;
- }
- public void set+属性名首字母大写(有1个参数){
- this.属性名 =属性名;
- }
三、继承:extends
- 继承最重要的作用是:有了继承才有了方法覆盖和多态。任何一个类,没有显示继承任何类,默认继承: Object
- 继承的特性:
- B类继承A类,则称A类为超类(superclass)、父类、基类,B类则称为子类(subclass)、派生类、扩展类。
- java中的继承只支持单继承,不支持多继承
- 虽然java中不支持多继承,但有的时候会产生间接继承的效果,例如:class C extends B,class B extends A,也就是说,C直接继承B,其实C还间接继承A。
- java中规定,子类继承父类,除构造方法和被private修饰的数据不能继承外,剩下都可以继承。
- java中的类没有显示的继承任何类,则默认继承Object类,Object类是java语言提供的根类(老祖宗类),也就是说,一个对象与生俱来就有Object类型中所有的特征。
四、方法重写(覆盖):override
- override:父类的方法无法满足当前子类的业务需求时,子类有必要进行“方法重写”。
- 两个类必须要有继承关系。
- 重写之后的方法和之前的方法具有: 相同的返回值类型、方法名、形式参数列表(顺序,个数,类型)。
- 子类访问修饰符的级别,不低于父类同名方法的访问修饰符的级别,访问权限不能更低,可以更高。
- 当子类对父类继承过来的方法进行“方法重写”之后,子类对象调用该方法的时候,一定执行方法重写之后的方法。
- 方法覆盖只是针对于方法,和属性无关。
- 私有方法无法覆盖。构造方法不能被继承,所以构造方法也不能被覆盖。方法覆盖只是针对于“实例方法”,“静态方法覆盖”没有意义。
- 方法重写override例子:
public class People { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public void speakHi(){ System.out.println(this.name + "和别人打招呼!"); } }
public class ChinaPeople extends People { public void speakHi(){ System.out.println("你好,我叫"+this.getName()+",很高兴认识你!"); } }
public class AmericaPeople extends People { public void speakHi(){ System.out.println("Hi,My name is "+this.getName()+",Nice to meet you!"); } }
public class PeopleTest { public static void main(String[] args) { ChinaPeople cp = new ChinaPeople(); cp.setName("张三"); cp.speakHi(); AmericaPeople ap = new AmericaPeople(); ap.setName("jackson"); ap.speakHi(); } }