《面向对象特性优秀PPT.ppt》由会员分享,可在线阅读,更多相关《面向对象特性优秀PPT.ppt(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、面向对象特性第一页,本课件共有32页本章内容this 关键字static 关键字package 和 import 语句 类的继承访问控制方法的重写Object类对象转型多态抽象类接口第二页,本课件共有32页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();第三页,本课件共有32页static 关键字静态成员变量在不创建类得对象的情况下,也可以使用,它是所有对象共有的变量,普通成员变量只有在创建了类的对象后才能被使用,与此相反,静态变量可以不先创建对象而直接使用。静态变量的声明如下:static int a;类.a=10;对象.a=20;第四页,本课件共有32页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);第五页,本课件共有32页静态方法只有在对象存在的条件下,我们才可以用成员变量和方法。然而,静态方法则不需要首先创建对象,可以直接调用它,在使用静态方法的时候一定要记住不可以在静态
5、的方法中调用非静态的变量,如下程序:public class Test int a;static void setA(int b)a=b;public static void main(String args)Test.setA(10);第六页,本课件共有32页静态变量与静态方法到底在什么方法中才能使用呢?如下程序 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();第七页,本课件共有32页package 和 import语句为便于管理大型软件系统中数目众多的类,为便于管理大型软件系统中数目众多的类,解决类的命名冲突问题,解决类的命名冲突问题,Java引入包引入包(package)机制,提供类的多重类命名空)机制,提供类的多重类命名空间。间。第八页,本课件共有32页package 和 import语句package 语句作为 Java 源文件的第一条语句,指明该文件中定义的类所
7、在的包。(若缺省该语句,则指定为无名包)。它的格式为:package pkg1.pkg2.pkg3;Java编译器把包对应于文件系统的目录管理,package语句中,用.来指明包(目录)的层次,例如使用语句package com.cstp;则该文件中所有的类位于.comcstp 目录下第九页,本课件共有32页如果将一个类打包,则使用该类时,必须使用该类的全名(例如:com.cstp.MyClass),Java编译器才会在找到该类。也可以使用 import 在文件的开头引入要使用到的类;例如:可以不需要用import语句直接使用 java.lang 包中的类。import com.cstp.My
8、Class;import java.util.*;/引入引入java.util包中所有的类包中所有的类 .MyClass myClass=new MyClass();/可以直接使用类名可以直接使用类名 .第十页,本课件共有32页Package import 总结如果想将一个类放入包中,在这个类源文件第一句话写package必须保证该类的class文件位于正确目录下另外的类想访问的话:写全名引入*具体类名访问位于同一个包中的类不需要引用第十一页,本课件共有32页类的继承与权限控制Java 中使用 extends 关键字实现类的继承机制通过继承,子类自动拥有了基类(superclass)的所有成员
9、(成员变量和方法)。Java只支持单继承,不允许多继承:一个子类只能有一个基类 一个基类可以派生出多个子类例子:TestExtends.java 第十二页,本课件共有32页访问控制Java权限修饰符 public protected private 置于类的成员定义前,用来限定其他对象对该类对象成员的访问权限。对于class的权限修饰只可以用 public 和 default。public类可以在任意地方被访问default类只可以被同一个包内部的类访问修饰符修饰符类内部类内部同一个包同一个包子类子类任何地方任何地方privateYesdefault|packageYesYesprotecte
10、dYesYesYespublicYesYesYesYes第十三页,本课件共有32页方法的重写(OverWrite OverRide)在子类中可以根据需要对从基类中继承来的方法进行重写。重写方法必须和被重写方法具有相同方法名称、参数列表和返回类型。重写方法不能使用比被重写方法更严格的访问权限。例子:TestOverWrite.java第十四页,本课件共有32页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);第十五页,本课件共有32页继承中的构造方法1、子类的构造过程中必须必须调用其基类的构造方法。2、子类可以在自己的构造方法中使用
13、super(argument_list)调用基类的构造方法。3.如果使用super,必须写在子类构造方法的第一行。4.如果子类的构造方法中没有显示地调用基类构造方法,则系统默认调用基类无参数的构造方法。如果子类的构造方法中没有显示地调用基类构造方法,而基类中又没有无参的构造方法,则编译出错。TestSuperSub.java第十六页,本课件共有32页Object类 ObjectObject类是所有类是所有JavaJava类的根基类类的根基类如果在类的声明中未使用如果在类的声明中未使用extendsextends关键字指明其基类,则默认基类为关键字指明其基类,则默认基类为ObjectObject
14、类类 public class Person public class Person.等价于:等价于:public class Person extends Object public class Person extends Object.第十七页,本课件共有32页对象转型一个基类的引用类型变量可以“指向”其子类的对象。一个基类的引用不可以访问其子类对象新增加的成员(属性和方法)。可以使用 引用 变量 instanceof 类名 来判断该引用型变量所所“指向指向”的对象的对象是否属于该类或该类的子类。第十八页,本课件共有32页对象转型实例(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;第十九页,本课件共有32页对象转型实例(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第二十页,本课件共有32页多态多态源于希腊语,本意为“拥有多种形态”,在Java中,它指的是拥有相同形式,但根据不同的情形拥有不同机能的特性。例子,“数字+数字=数字”,然而,“String对象+数字=String对象”,根据不同的情形,“+”运算符拥有不同的功能,既“+”运算符具有多态性。还有实现了重载或重写的方法拥有相同的名字,但不同情形下,他们又
19、拥有不同的功能,所以重载和重写也是一种多态。第二十一页,本课件共有32页父类的引用指向子类对象 从对象的内存角度来理解试试.假设现在有一个父类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内存.第二十二页,本课件共有32页抽 象 类用abstr
21、act关键字来修饰一个类时,这个类叫做抽象类;用abstract来修饰一个方法时,该方法叫做抽象方法。含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写。如果重写不了,应该声明自己为抽象。抽象类不能被实例化。抽象方法只需声明,而不需实现。例子:第二十三页,本课件共有32页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 (猫叫声猫叫声.);.);第二十四页,本课件共有32页Final关键字final修饰的变量的值不能够被改变final的成员变量final的局部变量(形参)final修饰的方法不能够被重写final修饰的类不能够被继承例子:第二十五页,本课件共有32页接 口接口(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();第二十六页,本课件共有32页接口特性接口可以多重实现;接口中声明的属性默认为 public 的;也只能是 public 的;接口中只能定义抽象方法,而且这些方法默认为public的、也只能是public的;接口可以继承其它的接口,并添加新的属性和抽象方法。第二十七页,本课件共有32页接 口多个无关
25、的类可以实现同一个接口。一个类可以实现多个无关的接口。与继承关系类似,接口与实现类之间存在多态性。定义Java类的语法格式:class extends class extends implements ,*implements ,*第二十八页,本课件共有32页接 口 举 例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);第二十九页,本课件共有32页一个类可以实现多个无关的接口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、件共有32页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);第三十一页,本课件共有32页第三章总结:对象和类的关系类(对象)之间的关系面向对象设计思想classnew引用的概念构造方法的概念方法重载构造方法重载thisstaticpackage&importprivate default protected publicextends 重载重写overloadoverwritefinalObject抽象类(abstract class)instanceof接口(interface)implements第三十二页,本课件共有32页