继承

来源:互联网 发布:strutting it 编辑:程序博客网 时间:2024/05/21 17:50
1.继承:——>泛化的过程
(1)作用:减少代码重复、提高代码的复用性
(2)通过extends来实现继承
(3)父类/基类:所有子类所共有的属性和行为
子类/派生类:子类所特有的属性和行为
(4)子类继承父类后,子类具有:子类+父类
(5)一个父类可以创建多个子类
一个子类只能有一个父类——>单一继承
(6)继承具有传递性
(7)java规定:构造子类之前必须先构造父类
在子类构造方法中若没有调用父类构造方法。
则默认super()来调用父类的无参构造,
若子类构造方法中自己调用了父类的构造方法,
则不再默认提供
super()调用父类的构造方法必须位于子类构造的第一行
2.super:指代当前对象的父类对象
(1)super.成员变量名----------访问父类的成员变量
(2)super.方法名()------------调用父类的方法
(3)super()-------------------调用父类的构造方法
3.方法的重写(override):重新写、覆盖
(1)发生在父子类中,方法名称相同,参数列表相同,方法体不同
(2)重写方法被调用时,看对象的类型


父类:

package oo.day03;public class Person {String name;int age;String address;Person(String name,int age,String address){this.name=name;this.age=age;this.address=address;}void sayHi() {System.out.println("我的名字是:"+name+",我今年"+age+"岁了,我家住"+address);}}

子类 1:

package oo.day03;public class Student extends Person{String stuId;Student(){super("zhangsan",25,"廊坊");this.stuId="002390";}void study() {}void sayHi() {System.out.println("我的名字是:"+name+",我今年"+age+"岁了,我家住"+address+"学号为:"+stuId);}}

子类 2:

package oo.day03;public class Teacher extends Person{double  salary;Teacher(String name,int age,String address,double  salary){super(name,age,address);this.salary=salary;}void teach() {}void sayHi() {System.out.println("我的名字是:"+name+",我今年"+age+"岁了,我家住"+address+"工资为:"+salary);}}

执行程序:

package oo.day03;public class Test {public static void main(String[] args) {Student zs=new Student();zs.sayHi();Teacher ls=new Teacher("lisi",36,"河北",2678.5);ls.sayHi();}}

结果如图:


4.重写遵循"两同两小一大"原则:
(1)两同:
    1.1)方法名称相同
1.2)参数列表相同
(2)两小:
    2.1)子类方法的返回值类型小于或等于父类的
2.2.1)void时,必须相等
2.2.2)基本类型时,必须相等
2.2.3)引用类型时,小于或等于
    2.2)子类抛出的异常小于或等于父类的---------异常之后
(3)一大:
    3.1)子类方法的访问权限大于或等于父类的-----访问控制修饰符
3.重写与重载的区别:——>重点
(1)重写(override)
  1.1)发生在父子类中,方法名称相同,参数列表相同,方法体不同
  1.2)遵循“运行期绑定”,看对象的类型来调用方法
(2)重载(Overload)
  2.1)发生在一个类中,方法名称相同,参数列表不同
  2.2)遵循“编译期绑定”,看引用的类型来绑定方法
4.向上造型:
(1)父类型的引用指向子类的对象
(2)能点出来什么,看引用的类型
C/S:客户端/服务器
B/S:浏览器/服务器——>参与

package oo.day03;public class UpDemo {public static void main(String[] args) {Foo o4=new Foo();o4.show();Eoo o5=new Foo();//向上造型o5.show();}}class Eoo{void show() {System.out.println("父类show");}}class Foo extends Eoo{void show() {System.out.println("子类show");}}

结果如图:



原创粉丝点击