继承和接口和java访问权限修饰符总结.doc_第1页
继承和接口和java访问权限修饰符总结.doc_第2页
继承和接口和java访问权限修饰符总结.doc_第3页
继承和接口和java访问权限修饰符总结.doc_第4页
继承和接口和java访问权限修饰符总结.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三章,第四章内容总结 -Mr yang 多态性: 发送消息给某个对象,让该对象自行决定响应何种行为。 通过将子类对象引用赋值给超类对象引用变量来实现动态方法调用。动态绑定: 一、使用父类类型的引用指向子类的对象; 二、该引用只能调用父类中定义的方法和变量; 三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用) 四、变量没有被重写(覆盖)的概念,”重写“的概念只针对方法, 1.方法重载: 在同一个类中定义了两个以上的同名的方法, 但是它们拥有不同的参数列表。 1.1重载的条件:参数不同a.个数不相同b.类型不同*c.顺序不同注意:与方法的返回类型无关,和访问修饰符无关 2.方法重写:在子类中定义了一个和父类中相同的方法,父类的方法在子类中就被覆盖了(隐藏了). 3.动态绑定:父类的引用指向子类的对象,如果调用的方法在子类中被重写,则调用子类重写了的方法。如果调用的方法在父类中没有定义,则报错。访问修饰符:1.tected3.private4.默认的方法修饰符:1.static:静态方法中不能访问非静态的变量和方法,也不能使用this和super关键字 static 关键字修饰的代码不依赖具体的对象实例. 总是比普通的代码块先加载2.final:能修饰类,方法,属性。 2.1:final修饰类时:该类不能被继承. 2.2:final修饰方法时:该方法不能被重写. 2.3:final修饰类的成员属性时:声明时就要赋值,或者在构造方法中给它赋值. final修饰类的属性时:必须在声明时赋值final修饰局部变量:如果在声明时没有赋值,则在后面的代码中可以有一次给它赋值的机会,一旦赋值则该变量的值不可更改。 final修饰的变量是引用类型时指引用不能更改,引用指向的对象的属性值是可以更改的. Final 表示最终的3.abstract:修饰类,方法. 抽象方法使用abstract修饰符修饰 抽象方法只能在抽象类中声明。 即:如果一个类中存在一个或以上的抽象方法,则该类也要声明为抽象类。 3.1:抽象类不能实例化对象。 3.2:抽象类中可以有抽象方法,也可以有普通方法。 3.3:构造方法不能声明为抽象的,因为子类无法覆盖。 3.4:子类继承抽象类时必须重写父类中所有的抽象方法,否则自己也要声明为抽象类. 3.5:可以声明抽象类的引用指向子类的对象。 动态绑定 4 接口:关键字interface声明接口。解决java不能多重继承的机制。1.接口中的方法都是抽象的。2.接口中的方法默认时public和abstract,所以public和abstract可以省略.3.接口中可以声明属性,属性默认为public static final4.接口使用关键字interface声明,使用implements实现接口. 问题: 接口和抽象的区别 ? 相同点 区别 : 继承 : 代码的可重用性抽象类 : 代码的灵活性 固定的方法 (数据库 )接口: 代码的可扩展性 java访问权限修饰符public protected default private用法总结 首先声明:java中,default这个修饰符并没有显式的声明,在成员变量和方法前什么修饰符也不用,默认的就是default。为了条理清晰,分三种不同情况来总结。 一 访问权限修饰符修饰成员变量和方法 public:表明该成员变量和方法是共有的,能在任何情况下被访问。 protected:必须在同一包中才能被访问及其子类中可以(说的比较简单,看个例子就明白了) eg:class A protected int weight; protected int f( int a,int b ) / 方法体 假设B与A在同一个包中,则 class B void g() A a=new A(); A.weight=100;/合法 A.f(3,4); /合法 特别说明:什么是在同一个包中? 答:用package打包在一起的class ,叫在同一个包中。(不明白,举个例子) eg:在JDK的srcjavaio中,你会看到许多java类,第一句源代码都是package java.io; 没有使用package打包的,在同一目录下的类也会被视做同一个包。 default:在这种情况下中,同包中的子类。区别在第二和第三种情况中。 eg: class A int weight ; int f( int a,int b ) / 方法体 假设B与A在同一个包中,则 class B void g() A a=new A(); A.weight=100;/合法 A.f(3,4); /合法 private: 只能在本类中访问。 eg: class Test private int money; Test() money=2000; private int getMoney() return money; public static void main(String args) Test te=new Test(); te.money=3000; /合法 int m=te.getMoney(); /合法 System.out.println(money=+m); PS: 实际上,把重要的数据修饰为private,然后写一个public的函数访问它,正好体现了OOP的封装特性,是OOP安全性的体现。 二 访问权限修饰符修饰类 1,不能用protected和private修饰类。 2,用default修饰的类叫友好类,在另外一个类中使用友好类创建对象时,要保证它们在同一包中。 三 访问权限修饰符与继承 这里的访问修饰符指的是修饰成员变量和方法。可以分为两种情况: 1,子类与父类在同一包中 此时只有声明为private的变量与方法不能被继承(访问)。 eg: class Father private int money ; int weight=100; class Son extends Father viod f() money=10000;/ 非法 weight=100; / 合法 2,子类与父类不在同一包中 此时private与default均不能被继承(访问), protected与public可以。 eg: Father.java package com.aaa public class Father int height ; protected int money=120; public int weight; protected int getMoney() return money; void setMoney(int newMoney) money=newMoney; Son.java package com.bbb import com.aaa.Father; public class Son extends Father void f() money=10000;/合法 /height=170;/非法,height为default修饰的变量 System.out.println(money);/输出结果是10000 /setMoney(300); /非法 int number=getMoney(); /合法 System.out.println(number);/输出结果是10000 public static void main(String args) Son sss=new Son(); sss.f(); 所以,访问权限修饰符权限从高到低排列是public ,protected ,default, private。Java中的abstract,static,final修饰符abstract修饰符abstract使用对象:类、接口、方法介绍:类中包括没有实现的方法,不能被实例化。如果是一个abstract方法,则方法体为空,该方法的实现在子类中被定义,并且包含一个abstract方法的类必须是一个abstract类abstract修饰符表示所修饰的类没有完全实现,还不能实例化。如果在类的方法声明中使用abstract修饰符,表明该方法是一个抽象方法,它需要在子类实现。在下面的情况下,类必须是抽象类:1.类中包含一个明确声明的抽象方法;2.类的任何一个父类包含一个没有实现的抽象方法;3.类的直接父接口声明或者继承了一个抽象方法,并且该类没有声明或者实现该抽象方法。如下例所示:abstract class A1public int v1;abstract void test();abstract class A2 extends A1 public int v2;class Sample extends A2 void test() 因为包含一个抽象方法test,类A1必须被声明为抽象类。它的子类A2继承了抽象方法test,但没有实现它,所以它也必须声明为抽象类。然而,A2的子类Sample因为实现了test,所以它不必声明为抽象的。注意:如果试图创建一个抽象类的实例就会产生编译错误;如果一个类是非抽象类却包含一个抽象方法,就会产生编译错误;构造函数和静态函数以及Final修饰的函数不能使用abstract修饰符;接口缺省为abstract。 Static修饰符static使用对象:类、方法、变量、初始化函数通常,在创建类的实例时,每个实例都会创建自己实例变量。但是在变量的声明中可以使用Static修饰符,它表明该成员变量属于类本身,独立于类产生的任何对象。这种成员变量称为静态变量(静态属性)。方法的声明中也可以使用static修饰符,表明该方法从属于类本身。静态属性和静态方法不需要创建实例就可以使用。典型的例子是java.lang包中的System类中的方法和变量。我们常用System.out.println(“message”);输出信息,并没有创建System的实例,是因为println方法声明为System类的静态方法,它不需创建实例就可以使用。下面的例子会帮助你更深刻的理解Static修饰符。注意各个代码块的加载次序。class Samplestatic int s1=3;static int s2;static void display() System.out.println(s1=+s1);System.out.println(s2=+s2);staticSystem.out.println(static block);s2=s1+1;public static void main(String args)Sample.display();一旦这个类被调用,所有的静态变量都被初始化,s1被赋为3,然后运行static块,这将打印出一段消息,并且把s2赋为s1+1,即4。然后解释器调用main成员函数,它调用了成员函数display,该函数输出s1和s2的信息。运行结果如下:C:java Samplestatic blocks1=3s2=4通过上面的例子还可以看出,一个静态成员函数可以通过它所属的类名来调用。注意:在静态成员函数中只能直接调用其它的静态成员函数或引用静态属性,否则会造成编译错误。静态成员函数中也不能使用this或者super,因为它们是和类的对象相关联的。final修饰符final使用对象:类、方法、变量介绍:被定义成final的类不允许出现子类,不能被覆盖,字段值不允许被修改。如果一个类是完全实现的,并且不再需要继承子类,则它可以声明为Final类。如果final类的名字出现在另一个类声明的extends字句的后面就会产生编译错误。这表明final类不能有任何的子类

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论