资源预览内容
第1页 / 共16页
第2页 / 共16页
第3页 / 共16页
第4页 / 共16页
第5页 / 共16页
第6页 / 共16页
第7页 / 共16页
第8页 / 共16页
第9页 / 共16页
第10页 / 共16页
亲,该文档总共16页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
文档供参考,可复制、编制,期待您的好评与关注! JAVA继承、抽象类、接口编辑人:星辰樱 联系QQ:838826112一 类的继承 通过继承可以实现代码的复用,被继承的类称为父类或超类(superclass),由继承而得到的类称为子类(subclass)。一个父类可以拥有多个子类,但一个类只能有一个直接父类,这是因为JAVA语言中不支多重继承。 子类继承父类的成员变量和成员方法,同时可以修改父类的成员变量或重写父类的方法,还可以添加新的成员变量或成员方法。 JAVA语言中有一个名为java.lang.Object的特殊类,所有的类都是直接或间接地继承该类而得到的。 1.子类的创建 类的继承是通过extends关键字来实现的,在定义类时若使用ectends关键字指出新定义类的父类,就是在两个类之间建立了继承关系。新定义的类称为子类,它可以从父类那里继承所有非private的成员作为自己的成员。 子类的创建: * 格式: class SubClass extends SuperClass * * . * . * . * 2.调用父类中特定的构造方法 在没有明确地指定构造方法时,子类还是会先调用父类中没有参数的构造方法,以便进行初始化的操作。在子类的构造方法中可以通过super()来调用父类特定的构造方法。例:/以Person作为父类,创建学生子类Student,并在子类中调用父类里某指定的构造方法。class Person2private String name;private int age;public Person2()/定义Person2类的无参构造方法System.out.println(调用了Person2类的无参构造方法);public Person2(String name,int age)/定义Person2类的有参构造方法System.out.println(调用了Person2类的有参构造方法);this.name=name;this.age=age;public void show()System.out.println(姓名:+name+ 年龄:+age);class Student2 extends Person2/定义继承自Person2类的子类Student2private String department;public Student2()/定义Student2类的无参构造方法System.out.println(调用了学生类的无参构造方法Student2();public Student2(String name,int age,String dep)/定义Student2类的有参构造方法super(name,age);/调用父类的胡参构造方法department=dep;System.out.println(我是+department+学生);System.out.println(调用了学生类的有参构造方法Student2(String name,int age,String dep);public class App8_2 public static void main(String args)Student2 stu1=new Student2();/创建对象,并调用无参构造方法Student2 stu2=new Student2(李小四,23,信息系);/创建对象并调用有参构造方法stu1.show();stu2.show();/*在子类中访问你类的构造方法,其格式为super(参数列表)。 * super()可以重载,也就是说,super()会根据参数的个数与类型,执行父类相应的构造方法。 * 调用父类构造方法的super()语句必须写在子类构造方法的第一行。 * super()与this()的功能相似,但super()是从子类的构造方法调用父类的构造方法, 而this()则是在同一个类内调用其他的构造方法。 * super()与this()均必须放在构造方法内的第一行,也就是这个原因,super()与this()无法同时存在同一个构造方法内。 * 与this关键字一样,super指的也是对象,所以super同样不能在static环境中使用,包括静态方法和静态初始化器(static语句块)。 3.在子类中访问父类的成员 例:/在学生子类Student中访问父类Person的成员。用protected修饰符和super关键字访问父类的成员class Person3protected String name;/用protected(保护成员)修饰符修饰protected int age;public Person3()/定义Person3类的“不做事”的无参构造方法public Person3(String name,int age)/定义Person3类的有参构造方法this.name=name;this.age=age;protected void show()System.out.println(姓名:+name+ 年龄:+age);class Student3 extends Person3/定义子类Student3,其父类为Person3private String department;int age=20;/新添加了一个与父类的成员变量age同名的成员变量public Student3(String xm,String dep)/定义Student3类的有参构造方法name=xm;/在子类里直接访问父类的protected成员namedepartment=dep;super.age=25;/利用super关键字将父类的成员变量age赋值为25System.out.println(子类Student3中的成员变量age=+age);super.show();/去掉super而只写sho()亦可System.out.println(系别:+department);public class App8_3 public static void main(String args)SuppressWarnings(unused)Student3 stu=new Student3(李小四,信息系);/*在子类中访问父类的成员: * 在子类中使用super不但可以访问父类的构造方法,还可以访问父类成员就是和成员方法, * 但super不能访问在子类中添加的成员。子类中访问父类成员的格式如下: * 1. super.变量名; 2.super.方法名; * 用protected修饰的成员可以被三种类所引用:该类自身、与它在同一个包中的其他类、在其他包中该的子类。 * 将成员声明为protected的最大好处是可以同时兼顾到成员的安全性和便利性。 4.覆盖 重载是指在同一个类内定义名称相同,但参数个数或类型不同的方法。 覆盖(overriding):是指在子类中,定义名称,参数个数与类型均与父类完全相同的方法,用于重写父类里同名方法的功能。 例:/以个人类Person为父类,创建学生子类Student,并用子类中的方法覆盖父类的方法。class Person4protected String name;protected int age;public Person4(String name,int age)this.name = name;this.age = age;protected void show()System.out.println(姓名:+name+ 年龄:+age);class Student4 extends Person4private String department;public Student4(String name,int age,String dep)super(name,age);department = dep;protected void show()/覆盖父类Person4中的同名方法System.out.println(系别:+department);public class App8_4 public static void main(String args)Student4 stu = new Student4(王永涛,24,电子);stu.show(); *覆盖父类的方法:子类在重新定义父类已有的方法时,应保持与父类完全相同的方法声明,即应与父类有完全相同的方法名、返回值类型和参数列表,否则就不是方法的覆盖,而是子类定义自己的与父类无关的方法,父类的方法末被覆盖,所以仍然存在。 *注意: 子类中不能覆盖父类中声明为final或static的方法。 在子类中覆盖父类的方法时,可以扩大父类中方法权限,但不可以缩小父类方法的权限。 5.用父类的对象访问子类的成员例:/利用父类Person5的对象调用子类Student5中的成员。与不可被继承的成员与最终类class Person5protected String name;/如果声明为静态最终变量,则不能被覆盖。protected int age;public Person5(String name, int age)this.name = name;this.age = age;protected void show()System.out.println(姓名:+name+ 年龄:+age);class Student5 extends Person5private String department;public Student5(String name,int age, String dep)super(name,age);department = dep;protected void show()System.out.println(系别:+department);public class
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号