面向对象特性精选文档.ppt

上传人:石*** 文档编号:44738764 上传时间:2022-09-22 格式:PPT 页数:32 大小:1.26MB
返回 下载 相关 举报
面向对象特性精选文档.ppt_第1页
第1页 / 共32页
面向对象特性精选文档.ppt_第2页
第2页 / 共32页
点击查看更多>>
资源描述

《面向对象特性精选文档.ppt》由会员分享,可在线阅读,更多相关《面向对象特性精选文档.ppt(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、面向对象特性本讲稿第一页,共三十二页本章内容this 关键字static 关键字package 和 import 语句 类的继承访问控制方法的重写Object类对象转型多态抽象类接口本讲稿第二页,共三十二页this 关键字在类的方法定义中使用的 this 关键字代表使用该方法的对象使用该方法的对象的引用。当必须指出当前使用方法的对象是谁时要使用this。有时使用this可以处理方法中成员变量和参数重名的情况。public class Leafpublic class Leaf int i=0;int i=0;public Leaf(int i)this.i=i;public Leaf(int

2、i)this.i=i;Leaf increament()Leaf increament()i+;i+;return this;return this;void print()System.out.println(i=+i);void print()System.out.println(i=+i);public static void main(String args)public static void main(String args)Leaf leaf=new Leaf(100);Leaf leaf=new Leaf(100);leaf.increament().increament().

3、print();leaf.increament().increament().print();本讲稿第三页,共三十二页static 关键字静态成员变量在不创建类得对象的情况下,也可以使用,它是所有对象共有的变量,普通成员变量只有在创建了类的对象后才能被使用,与此相反,静态变量可以不先创建对象而直接使用。静态变量的声明如下:static int a;类.a=10;对象.a=20;本讲稿第四页,共三十二页public class Test public class Test static int static int a;a;int b;int b;public static void main(

4、String args)public static void main(String args)Test.a=10;Test t1=new Test();new Test();Test t2=new Test();new Test();System.out.println(t1.a);t1.a=20;System.out.println(t1.a);t2.a=30;System.out.println(Test.a);本讲稿第五页,共三十二页静态方法只有在对象存在的条件下,我们才可以用成员变量和方法。然而,静态方法则不需要首先创建对象,可以直接调用它,在使用静态方法的时候一定要记住不可以在静态

5、的方法中调用非静态的变量,如下程序:public class Test int a;static void setA(int b)a=b;public static void main(String args)Test.setA(10);本讲稿第六页,共三十二页静态变量与静态方法到底在什么方法中才能使用呢?如下程序 public class Test static int a;static void hello()System.out.println(您好.);static void setA(int b)a=b;hello();void printA()System.out.println(

6、a);hello();public static void main(String args)Test.setA(100);Test t=new Test();t.printA();本讲稿第七页,共三十二页package 和 import语句为便于管理大型软件系统中数目众多的类,为便于管理大型软件系统中数目众多的类,解决类的命名冲突问题,解决类的命名冲突问题,Java引入包引入包(package)机制,提供类的多重类命名空间。)机制,提供类的多重类命名空间。本讲稿第八页,共三十二页package 和 import语句package 语句作为 Java 源文件的第一条语句,指明该文件中定义的类所

7、在的包。(若缺省该语句,则指定为无名包)。它的格式为:package pkg1.pkg2.pkg3;Java编译器把包对应于文件系统的目录管理,package语句中,用.来指明包(目录)的层次,例如使用语句package com.cstp;则该文件中所有的类位于.comcstp 目录下本讲稿第九页,共三十二页如果将一个类打包,则使用该类时,必须使用该类的全名(例如:com.cstp.MyClass),Java编译器才会在找到该类。也可以使用 import 在文件的开头引入要使用到的类;例如:可以不需要用import语句直接使用 java.lang 包中的类。import com.cstp.My

8、Class;import java.util.*;/引入引入java.util包中所有的类包中所有的类 .MyClass myClass=new MyClass();/可以直接使用类名可以直接使用类名 .本讲稿第十页,共三十二页Package import 总结如果想将一个类放入包中,在这个类源文件第一句话写package必须保证该类的class文件位于正确目录下另外的类想访问的话:写全名引入*具体类名访问位于同一个包中的类不需要引用本讲稿第十一页,共三十二页类的继承与权限控制Java 中使用 extends 关键字实现类的继承机制通过继承,子类自动拥有了基类(superclass)的所有成员

9、(成员变量和方法)。Java只支持单继承,不允许多继承:一个子类只能有一个基类 一个基类可以派生出多个子类例子:TestExtends.java 本讲稿第十二页,共三十二页访问控制Java权限修饰符 public protected private 置于类的成员定义前,用来限定其他对象对该类对象成员的访问权限。对于class的权限修饰只可以用 public 和 default。public类可以在任意地方被访问default类只可以被同一个包内部的类访问修饰符修饰符类内部类内部同一个包同一个包子类子类任何地方任何地方privateYesdefault|packageYesYesprotecte

10、dYesYesYespublicYesYesYesYes本讲稿第十三页,共三十二页方法的重写(OverWrite OverRide)在子类中可以根据需要对从基类中继承来的方法进行重写。重写方法必须和被重写方法具有相同方法名称、参数列表和返回类型。重写方法不能使用比被重写方法更严格的访问权限。例子:TestOverWrite.java本讲稿第十四页,共三十二页super 关键字在在JavaJava类中使用类中使用supersuper来引用基类的成分;例如:来引用基类的成分;例如:class FatherClass class FatherClass public int value;public

11、 int value;public void f()public void f()value=100;value=100;System.out.println System.out.println (FatherClass.value=+value);(FatherClass.value=+value);class ChildClass extends FatherClass class ChildClass extends FatherClass public int value;public int value;public void f()public void f()super.f()

12、;super.f();value=200;value=200;System.out.println System.out.println (ChildClass.value=+value);(ChildClass.value=+value);System.out.println(value);System.out.println(value);System.out.println(super.value);System.out.println(super.value);本讲稿第十五页,共三十二页继承中的构造方法1、子类的构造过程中必须必须调用其基类的构造方法。2、子类可以在自己的构造方法中使用

13、super(argument_list)调用基类的构造方法。3.如果使用super,必须写在子类构造方法的第一行。4.如果子类的构造方法中没有显示地调用基类构造方法,则系统默认调用基类无参数的构造方法。如果子类的构造方法中没有显示地调用基类构造方法,而基类中又没有无参的构造方法,则编译出错。TestSuperSub.java本讲稿第十六页,共三十二页Object类 ObjectObject类是所有类是所有JavaJava类的根基类类的根基类如果在类的声明中未使用如果在类的声明中未使用extendsextends关键字指明其基类,则默认基类为关键字指明其基类,则默认基类为ObjectObject

14、类类 public class Person public class Person.等价于:等价于:public class Person extends Object public class Person extends Object.本讲稿第十七页,共三十二页对象转型一个基类的引用类型变量可以“指向”其子类的对象。一个基类的引用不可以访问其子类对象新增加的成员(属性和方法)。可以使用 引用 变量 instanceof 类名 来判断该引用型变量所所“指向指向”的对象的对象是否属于该类或该类的子类。本讲稿第十八页,共三十二页对象转型实例(1)class Animal class Anima

15、l public String name;public String name;Animal(String name)Animal(String name)this.name=name;this.name=name;class Cat extends Animal class Cat extends Animal public String eyeColor;public String eyeColor;Cat(String n,String c)Cat(String n,String c)super(n);eyeColor=c;super(n);eyeColor=c;Class Dog ex

16、tends Animal Class Dog extends Animal public String furColor;public String furColor;Dog(String n,String c)Dog(String n,String c)super(n);furColor=c;super(n);furColor=c;本讲稿第十九页,共三十二页对象转型实例(2)public class Test public static void main(String args)Animal a=new Animal(name);Cat c=new Cat(catname,blue);Do

17、g d=new Dog(dogname,black);System.out.println(a instanceof Animal);/true;System.out.println(c instanceof Animal);/true;System.out.println(d instanceof Animal);/true;System.out.println(c instanceof Cat);/true;a=new Dog(bigyellow,yellow);System.out.println(a.name);/bigyellowSystem.out.println(a instan

18、ceof Animal);/true;System.out.println(a instanceof Dog);/true;Dog d1=(Dog)a;/要加强制转换符System.out.println(d1.furColor);/yellow本讲稿第二十页,共三十二页多态多态源于希腊语,本意为“拥有多种形态”,在Java中,它指的是拥有相同形式,但根据不同的情形拥有不同机能的特性。例子,“数字+数字=数字”,然而,“String对象+数字=String对象”,根据不同的情形,“+”运算符拥有不同的功能,既“+”运算符具有多态性。还有实现了重载或重写的方法拥有相同的名字,但不同情形下,他们又

19、拥有不同的功能,所以重载和重写也是一种多态。本讲稿第二十一页,共三十二页父类的引用指向子类对象 从对象的内存角度来理解试试.假设现在有一个父类Father,它里面的变量需要占用1M内存.有一个它的子类Son,它里面的变量需要占用0.5M内存.现在通过代码来看看内存的分配情况:Fatherf=newFather();/系统将分配1M内存.Sons=newSon();/系统将分配1.5M内存!因为子类中有一个隐藏的引用super会指向父类实例,所以在实例化子类之前会先实例化一个父类,也就是说会先执行父类的构造函数.由于s中包含了父类的实例,所以s可以调用父类的方法.Sons1=s;/s1指向那1.

20、5M的内存.Fatherf1=(Father)s;/这时f1会指向那1.5M内存中的1M内存,即是说,f1只是指向了s中实例的父类实例对象,所以f1只能调用父类的方法(存储在1M内存中),而不能调用子类的方法(存储在0.5M内存中).Sons2=(Son)f;/这句代码运行时会报ClassCastException.因为f中只有1M内存,而子类的引用都必须要有1.5M的内存,所以无法转换.Sons3=(Son)f1;/这句可以通过运行,这时s3指向那1.5M的内存.由于f1是由s转换过来的,所以它是有1.5M的内存的,只是它指向的只有1M内存.本讲稿第二十二页,共三十二页抽 象 类用abstr

21、act关键字来修饰一个类时,这个类叫做抽象类;用abstract来修饰一个方法时,该方法叫做抽象方法。含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写。如果重写不了,应该声明自己为抽象。抽象类不能被实例化。抽象方法只需声明,而不需实现。例子:本讲稿第二十三页,共三十二页abstract class Animal abstract class Animal private String name;private String name;Animal(String name)Animal(String name)this.name=name;this.name=name;p

22、ublic abstract void enjoy();public abstract void enjoy();class Cat extends Animal class Cat extends Animal private String eyesColor;private String eyesColor;Cat(String n,String c)Cat(String n,String c)super(n);eyesColor=c;super(n);eyesColor=c;public void enjoy()public void enjoy()System.out.println

23、System.out.println (猫叫声猫叫声.);.);本讲稿第二十四页,共三十二页Final关键字final修饰的变量的值不能够被改变final的成员变量final的局部变量(形参)final修饰的方法不能够被重写final修饰的类不能够被继承例子:本讲稿第二十五页,共三十二页接 口接口(interface)是抽象方法和常量值的定义的集合。从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。接口定义举例:public interface Runner public interface Runner public static final i

24、nt id=1;public static final int id=1;public void start();public void start();public void run();public void run();public void stop();public void stop();本讲稿第二十六页,共三十二页接口特性接口可以多重实现;接口中声明的属性默认为 public 的;也只能是 public 的;接口中只能定义抽象方法,而且这些方法默认为public的、也只能是public的;接口可以继承其它的接口,并添加新的属性和抽象方法。本讲稿第二十七页,共三十二页接 口多个无关

25、的类可以实现同一个接口。一个类可以实现多个无关的接口。与继承关系类似,接口与实现类之间存在多态性。定义Java类的语法格式:class extends class extends implements ,*implements ,*本讲稿第二十八页,共三十二页接 口 举 例interface Singer interface Singer public void sing();public void sing();public void sleep();public void sleep();class Student implements Singer class Student imple

26、ments Singer public void study()public void study()System.out.println(studying);System.out.println(studying);public void sing()public void sing()System.out.println(student is singing);System.out.println(student is singing);public void sleep()public void sleep()System.out.println(student is sleeping)

27、;System.out.println(student is sleeping);本讲稿第二十九页,共三十二页一个类可以实现多个无关的接口interface Singer interface Singer public void sing();public void sing();public void sleep();public void sleep();interface Painter interface Painter public void paint();public void paint();public void eat();public void eat();本讲稿第三十页

28、,共三十二页class Teacher implements Singer,Painter private String name;public String getString()return name;Teacher(String name)this.name=name;public void teach()System.out.println(teaching);public void sing()System.out.println (teacher is singing);public void sleep()System.out.println (teacher is sleepi

29、ng);public void paint()System.out.println (teacher is painting);public void eat()System.out.println (teacher is eating);本讲稿第三十一页,共三十二页第三章总结:对象和类的关系类(对象)之间的关系面向对象设计思想classnew引用的概念构造方法的概念方法重载构造方法重载thisstaticpackage&importprivate default protected publicextends 重载重写overloadoverwritefinalObject抽象类(abstract class)instanceof接口(interface)implements本讲稿第三十二页,共三十二页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁