Java基础Java类设计课件.pptx
《Java基础Java类设计课件.pptx》由会员分享,可在线阅读,更多相关《Java基础Java类设计课件.pptx(50页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Java Java 类设计类设计讲师:佟刚讲师:佟刚新新浪微博:尚硅谷浪微博:尚硅谷-佟刚佟刚本章内容Java类的继承方法的重写、覆盖访问控制super 关键字多态性及其应用Object 类及其主要方法本章内容JavaJava类的继承类的继承方法的重写、覆盖多态性及其应用成员访问控制对象的创建和初始化细节几种常用的Java类类的继承(1)为描述和处理个人个人信息,定义类Person:public class Person public String name;public int age;public Date birthDate;public String getInfo().PersonP
2、erson+name:String+age:int+birthDate:Date+getInfo():String类的继承(2)为描述和处理学生学生信息,定义类Student:public class Student public String name;public int age;public Date birthDate;public String school;public String getInfo().StudentStudent+name:String+age:int+birthDate:Date+school:String+getInfo():String类的继承(3)通过继
3、承继承,简化Student类的定义:public class Person public String name;public int age;public Date birthDate;public String getInfo().public class Student extends Person public String school;/Student类继承了父类Person的所有属性和方法,并增加了一个属性school。Person中的属性和方法,Student都可以利用。PersonPerson+name:String+age:int+birthDate:Date+getInf
4、o():StringStudentStudent+school:String类的继承(4)类继承语法规则:class class extendsextends 类的继承(5)Java只支持单继承,不允许多重继承一个子类只能有一个父类一个父类可以派生出多个子类单继承举例PersonPerson+name:String+age:int+birthDate:Date+getInfo():StringStudentStudent+school:StringSoldierSoldierOfficerOfficerGraduateGraduate+major:String+register():void父
5、类子类孙子类类的继承(6)子类继承了父类,就继承了父类的方法和属性。在子类中,可以使用父类中定义的方法和属性,也可以创建新的数据和方法。因而,子类通常比父类的功能更多子类通常比父类的功能更多。在Java 中,继承的关键字用的是“extends”,即子类不是父类的子集,而是对父类的“扩展”。关于继承的规则:子类不能继承父类中私有的子类不能继承父类中私有的(private)(private)的成员变量和方法的成员变量和方法。练习1 1.(1)定义一个ManKind类,包括成员变量 int sex 和 int salary;方法 void manOrWorman():根据sex的值显示“man”(s
6、ex=1)或者“women”(sex=0);方法 void employeed():根据salary的值显示“no job”(salary=0)或者“job”(salary!=0)。(2)定义类Kids1继承ManKind,并包括成员变量 int yearsOld;方法 printAge()打印 yearsOld 的值。(3)在Kids1类的main方法中实例化Kids1的对象 someKid,用该对象访问其父类的成员变量及方法。练习1 2.根据下图实现类。在TestCylinder类中创建Cylinder类的对象,设置圆柱的底面半径和高,并输出圆柱的体积。Circle (Circle (圆圆
7、)-radius:double Circle():构造方法,将radius属性初始化为1+setRadius(double radius):void+getRadius():double+findArea():double 计算圆的面积Cylinder (Cylinder (圆柱圆柱)-length:doubleCylinder():构造方法,将length属性初始化为1+setLength(double length):void+getLength():double+findVolume():double 计算圆柱体积本章内容Java类的继承访问访问控制控制方法的重载、覆盖super 关键字
8、多态性及其应用Object 类及其主要方法访问控制修饰符修饰符同一个类同一个类同一个包同一个包子类子类整体整体privateprivateYesdefaultdefaultYesYesprotectedprotectedYesYesYespublicpublicYesYesYesYes可以对Java类中定义的属属性性和方方法法进行访问控制-规定不同的保护等级:public、protected、default、private访问控制举例(1)class Parent private int f1=1;int f2=2;protected int f3=3;public int f4=4;priv
9、ate void fm1()System.out.println(in fm1()f1=+f1);void fm2()System.out.println(in fm2()f2=+f2);protected void fm3()System.out.println(in fm3()f3=+f3);public void fm4()System.out.println(in fm4()f4=+f4);访问控制举例(2)class Child extends Parent /设父类和子类在同一个包内private int c1=21;public int c2=22;private void cm
10、1()System.out.println(in cm1()c1=+c1);public void cm2()System.out.println(in cm2()c2=+c2);public static void main(String args)int i;Parent p=new Parent();i=p.f2;/i=p.f3;i=p.f4;p.fm2();/p.fm3();p.fm4();Child c=new Child();i=c.f2;/i=c.f3;i=c.f4;i=c.c1;/i=c.c2;c.cm1();/c.cm2();c.fm2();c.fm3();c.fm4()访问
11、控制分析f2_defaultc2_publicf3_protectedf4_publicc1_private子类对象可以访问的数据子类的对象可以调用的方法fm2()_defaultfm3()_ protectedfm4()_ publiccm2()_publiccm1()_private父类Parent和子类Child在同一包中定义时:本章内容Java类的继承访问控制方法的重写、方法的重写、覆盖覆盖super 关键字多态性及其应用Object 类及其主要方法覆盖方法在子类中可以根据需要对从父类中继承来的方法进行改造覆盖方法覆盖方法(方法的重置、重写重置、重写),在程序执行时,子类的方法将覆盖父
12、类的方法。覆盖方法必须和被覆盖方法具有相同的方法名称、参数列表方法名称、参数列表和返回值类型。和返回值类型。覆盖方法不能使用比被覆盖方法更严格的访问权限。覆盖方法不能使用比被覆盖方法更严格的访问权限。覆盖方法举例(1)public class Person public String name;public int age;public String getInfo()public String getInfo()return Name:+name+n+age:+age;public class Student extends Person public String school;publi
13、c String getInfo()public String getInfo()/覆盖方法 return Name:+name+nage:+age +nschool:+school;public static void main(String args)Student s1=new Student();s1.name=Bob;s1.age=20;s1.school=school2;System.out.println(s1.getInfo();/Name:Bob age:20 school:school2 Person p1=new Person();p1.getInfo();/调用Pers
14、on类的getInfo()方法Student s1=new Student();s1.getInfo();/调用Student类的getInfo()方法这是一种“多态性”:同名的方法,用不同的对象来区分调用的是哪一个方法。覆盖方法举例(2)class Parent public public void method1()class Child extends Parent private private void method1()/非法,子类中的method1()的访问权限private比被覆盖方法的访问权限public弱public class UseBoth public void do
15、OtherThing()Parent p1=new Parent();Child p2=new Child();Child p2=new Child();p1.method1();p2.method1();修改练习1中定义的类Kids1,在Kids1中重新定义employed()方法,覆盖父类ManKind中定义的employed()方法,输出“Kids should study and no job.”练习2本章内容Java类的继承访问控制方法的重载、覆盖super super 关键字关键字super super 关键字关键字子类对象的实例化过程子类对象的实例化过程多态性及其应用Object
16、 类及其主要方法关键字super在Java类中使用super来引用父类的成分super可用于访问父类中定义的属性super可用于调用父类中定义的成员方法super可用于在子类构造方法中调用父类的构造方法super的追溯不仅限于直接父类关键字 super举例 public class Person private String name;private int age;public String getInfo()return Name:+name+nage:+age;public class Student extends Person private String school=New Or
17、iental;public String getSchool()return school;public String getInfo()/调用父类的方法 return super.getInfosuper.getInfo()+nschool:+school;1.修改练习3中定义的类Kids1中employed()方法,在该方法中调用父类ManKind的employed()方法,然后再输出“but Kids should study and no job.”2.修改练习1中定义的Cylinder类,在Cylinder类中覆盖findArea()方法,计算圆柱的表面积。考虑:findVolume
18、方法怎样做相应的修改?在TestCylinder类中创建Cylinder类的对象,设置圆柱的底面半径和高,并输出圆柱的表面积和体积。附加题:在TestCylinder类中创建一个Circle类的对象,设置圆的半径,计算输出圆的面积。体会父类和子类成员的分别调用。练习4构造方法不能继承子类继承父类所有的成员变量和成员方法,但不继承父类的构造方法在一个Java类中可以通过两种方式获得构造方法使用系统默认的无参数构造方法显式定义一个或多个构造方法一旦显式定义了构造方法,则系统不再提供默认构造方法调用父类构造方法在在子子类类的的构构造造方方法法中中可使用super(参数列表)语句调用父类的构造方法如果
19、子类的构造方法中没有显示地调用父类构造方法,也没有使用this关键字调用重载的其它构造方法,则系统默认调用父类无参数的构造方法如果子类构造方法中既未显式调用父类构造方法,而父类中又没有无参的构造方法,则编译出错调用父类构造方法举例(1)1 public class Person 2 3 private String name;4 private int age;5private Date birthDate;67 public Person(String name,int age,Date d)8 this.name=name;9 this.age=age;10 this.birthDate=
20、d;11 12 public Person(String name,int age)13 this(name,age,null);14 15 public Person(String name,Date d)16 this(name,30,d);17 18 public Person(String name)19 this(name,30);2021/22 调用父类构造方法举例(2)1 public class Student extends Person 2 private String school;34 public Student(String name,int age,String
21、s)5 super(namesuper(name,age),age);6 school=s;7 8 public Student(String namename,String s)9 super(name)super(name);10 school=s;11 12 public Student(String s)1313 /编译出错编译出错:no super(),:no super(),系统将调用父类无参数的构造方法。系统将调用父类无参数的构造方法。13 school=s;14 15 思考 1).为什么super()和this()调用语句不能同时在一个构造函数中出现?2).为什么super()
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 基础 设计 课件
限制150内