资源预览内容
第1页 / 共40页
第2页 / 共40页
第3页 / 共40页
第4页 / 共40页
第5页 / 共40页
第6页 / 共40页
第7页 / 共40页
第8页 / 共40页
第9页 / 共40页
第10页 / 共40页
亲,该文档总共40页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
Java语言的面向对象特性主讲人:孙国欣类与类之间的关系n使用关系:当类A需要从类B的对象中获 得信息时,称类A与类B之间存在使用关 系n包含关系:当类A的一个属性是类B的对 象时,称类A与类B之间存在包含关系, 这是一种“有一个”的关系n继承关系:当类A是类B的一个特例时, 称为继承关系类的特性n类的继承性n类的多态(重载)n抽象类和方法n内部类接口和包当类A是类B的一个特例时,称类A与类B之间 存在继承关系,类A具有类B的所有属性和方 法,并具有自己独立的特性,称类B为父类 或者超类,称类A为子类类的继承n面向对象最重要的特点之一,就是可以实现对 类的复用n通过“继承”一个现有的类,可以使用已经定 义的类中的方法和变量n类的方法可以被继承,但是类的构造方法不能 被继承n在Java中,一个类只能继承一个父类,这种方 式叫做单继承。这一点和C+不一样类的继承njava.lang.Object类是所有类的父类n虽然一个类只可以继承一个父类,但是一个父 类却可以被多个子类所继承。n从子类的角度看,它是“继承(extends)” 父类;而从父类的角度看,它是“派生( derive)”子类。它们指的都是同一个动作, 只是角度不同而已类的继承n类继承的基本语法:n class extends nn *nn类的继承例子:public class Animal private int weight; public int getWeight() return weight; public void setWeight(int w) weight=w; public class Dog extends Animal /* *子类新增方法 */ public void Bark() System.out.println(“WangWang“); public class MyDog private static Dog myDog; public static void main(String args) myDog=new Dog(); myDog.setWeight(50); System.out.println(“My Dogs Weight is“+myDog.getWeight(); myDog.Bark(); n方法的覆盖累计城中,正如子类可以定义与父 类同名的域,实现对父类域的隐藏,子类也可以 定义与父类同名的方法,实现对父类同名方法 的覆盖nsuper关键字,表示当前对象的直接父类,是当前 对象的直接父类对象的引用,在类的继承中,使 用该关键字可以访问超类中被子类隐藏的域和 被子类覆盖的方法,子类对父类构造方法的继 承遵循两个规则,1 创建子类对象的实例时,系 统可以自动调用父类的无参数构造方法初始化 书与父类的数据n对于父类中带参数的构造方法,系统不能自动 调用他们,只能通过在子类构造方法中使用关 键字调用super关键字,并且super关键字必须是 子类构造方法的第一个可执行语句n类对象之间的类型转换,类作为一种引用数据 类型,不同的类对象之间也可以进行类型转换父类与子类对象之间的类型转换规则如下 子类对象转换成为父类类型时,可以进行隐式类型 转换 父类对象转换成子类类型时,必须进行显示的类型 转换方法的覆盖(override) n当子类继承父类时,可以从父类继承它的属性和 方法n如果从父类继承的方法不能满足子类的需求,可 以对其进行改写,这个过程叫方法的覆盖( override),也称为方法的重写n当对父类的方法进行覆盖时,子类中的方法必须 和父类中对应的方法具有相同的方法名称、输入 参数和返回值子类中的覆盖方法不能使用比父类 中被覆盖方法更严格的访问权限n方法的覆盖体现了类的多态性public class Person String name; int age; String sex; public String showName() return name; public class Teacher extends Person private String department; public void setDepartment(String dept) department = dept; public String getDepartment() return department; /方法覆盖 public String showName() return name+“老师“; super 关键字n在Java类中使用super来引用父类的成分nsuper可用于访问父类中定义的属性nsuper可用于调用父类中定义的成员方法nsuper可用于在子类构造器中调用父类的构 造器nsuper的追溯不仅于直接父类调用父类构造器调用父类构造器n在子类的构造器中可使用语句 super(argument_list) 调用父类的构造器n如果子类的构造器中没有显式地调用父类构造 器,也没有使用this关键字调用重载的其它构 造器,则系统默认调用父类无参数的构造器n如果子类构造器中既未显式调用父类构造器, 而父类中又没有无参的构造器,则编译出错public class Person private String name; private int age; private String sex; public String showName() return name; public class Teacher extends Person /方法覆盖 public String showName() /return name+“老师“; return super.showName()+“老师“; nclass Fathern nnclass Son extends FathernSon()nSystem.out.println(“Sons constructor“);nnSon(int i)nSystem.out.println(“Sons constructori“);nnnclass Test1npublic static void main(String args)nint i=5;nSon son1= new Son();nSon son2= new Son(i);nnnclass FathernFather()nSystem.out.println(“Fathers constructor“);nnFather(int i)nSystem.out.println(“Fathers constructori“);nnnclass Son extends FathernSon()nSystem.out.println(“Sons constructor“);nnSon(int i)nSystem.out.println(“Sons constructori“);nnnclass Test2npublic static void main(String args)nSon son1=new Son();nSon son2=new Son(5);nnnclass GrandpanGrandpa()nSystem.out.println(“Grandpas constructor“);nnGrandpa(int i)nSystem.out.println(“Grandpas constructori“);nnnclass Father extends GrandpanFather()nSystem.out.println(“Fathers constructor“);nnFather(int i)nSystem.out.println(“Fathers constructori“);nnnclass Son extends FathernSon()nSystem.out.println(“Sons constructor“);nnSon(int i)nSystem.out.println(“Sons constructori“);nnnclass Test3npublic static void main(String args)nint i=2; Son son1=new Son();nSon son2=new Son(i);nnnclass Fathern nFather(int i)nSystem.out.println(“Fathers constructori“);nnnclass Son extends FathernSon()nnSystem.out.println(“Sons constructor“);nnSon(int i)nSystem.out.println(“Sons constructori“);nnnclass Test4npublic static void main(String args)nSon son1=new Son();nSon son2=new Son(5);nnnclass Fathern nFather(int i)nSystem.out.println(“Fathers constructori“);nnnclass Son extends FathernSon()nsuper(8);nSystem.out.println(“Sons constructor“);nnSon(int i)nsuper(8);nSystem.out.println(“Sons constructori“);nnnclass Test5npublic static void main(String args)nSon son1=new Son();nSon son2=new Son(5);nnthisnJava中为解决变量的命名冲突和不确定性问题 ,引入关键字“this”代表其所在方法的当前 对象。n构造器中指该构造器所创建的新对象 n方法中指调用该方法的对象nthis关键字的用法n在类本身的方法或构造器中引用该类的实 例变量和方法n将当前对象作为参数传递给其它方法或构 造器用来调用其他的重载的构造器方法的重载n当类中的方法名相同时,称为方法的重 载(overload)n例如:npublic void println(int i);npublic void println(char c);npublic void println(String s);构造器的重载n除了方法外,类的构造器也可以实现重 载n类的构造器可以相互调用,调用方式是 使用this关键字来实现class A int x; A() X=0; A(int ax) x=ax; class B extends A double d; B() d=0; B(double dx) super(); d=dx; B(int i, double dx) super(i); d=dx; public class UseConstrupublic static void main(String args) B b1=new B();B b1=new B(4.7); B b1=new B(6,5.0); System.out.println(“b1.x=”+b1.x,”,b1.d=“+b1.d); System.out.println(“b2.x=”+b2.x,”,b2.d=“+
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号