java学习笔记8(继承 抽象)
一、继承的好处 :
1 继承的出现提高了代码的复用性,提高了软件开发效率
2 继承的出现让类与类之间产生了关系,提供了多态的前提
注意事项:
在Java中一个类只能有一个直接的父类,例如:class A{}
class B{}
class C extends A,B{}(这种写法是错的)
可以通过多重继承来实现, 如:class A{}
class B extends A{}
class C extends B{} (这种写法是正确的)
3继承后子类父类成员变量的特点:
子类对像调用成员变量的时候,子类自己有,使用子类的,子类没有则调用父类的
当子类父类中出现了同名成员变量,通过this 关键字进行区分
例:
public class Person { // 人的姓名年龄,成员变量 private String name; private int age; public void setAge(int a) { if (a < 0 || a > 100) { age = 20; } else { age = a; } } public void setName(String n){ name = n; } //定义方法,获取age public int getAge(){ return age; } public String getName(){ return name; } // 说话功能 public void speak() { String name = "李四"; int age = 16; System.out.println(this.age + "岁的" + this.name + "在说话"); } }
public class PersonTest { public static void main(String[] args) { Person p = new Person(); p.setName("张三"); p.setAge(80); System.out.println(p.getAge()); System.out.println(p.getName()); p.speak(); } }
这里如果不写this 输出的就是李四,如果写了则输出张三
注意 this 是调用者本身的对象
二、、 继承后子类父类成员方法的特性--->子类重写父类的方法
1:子类的对象调用方法时,子类自己有使用自己的,子类没有,则调用父类的
2:子类中出现和父类一样的方法时,会出现覆盖操作,也称为override重写,复写,或者覆盖
3:为什么重写父类的方法
父类的方法最先存在,如果项目需求改了,父类的方法无法满足项目需求,但是不能改动父类的方法;所以要重写在原来的功能上提供更强大的功能。
方法覆盖的注意事项
权限:子类方法覆盖父类方法,必须保证权限大于等于父类权限
四大权限: public> 默认=protected>private
重载与重写对比:
重载:权限修饰符无关
方法名:重载的两个方法名必须要相同
形参的个数不同,形参的类型不同,两者至少满足一个
重载与返回值类型无关
重写:权限修饰符 子类的权限大于等于父类的权限
方法名:子类方法名必须和父类相同
形参列表:子类和父类的形参列表必须相同
返回值类型:基本数据类型:必须相同
引用数据类型:子类方法的返回值类型与父类方法的返回值类型相同或者子类方法的返回值类型是父类方法的返回值类型的子类
三、、抽象
抽象类的产生
分析事物时,发现了共性内容,就会向上抽取,会出现这样一种特殊情况,就是方法功能声明相同,但方法功能主题不同。这时候也可以抽取,但只抽取方法声明,不会抽取方法主体,那么此方法就是抽象方法
抽象类的作用:继承的体系
抽象类强制子类重写抽象方法,保证体系功能的完整性
抽象类的注意事项
1 有抽象方法的一定是抽象类,抽象类不仅仅有抽象方法
2 抽象关键字abstract 不可以共存的: private final static
3 抽象类必须是父类,不能实例化 需new其子类