【Java精品源码栏目提醒】:网学会员在Java精品源码频道为大家收集整理了“继承和接口和java访问权限修饰符总结 - 其它资料“提供大家参考,希望对大家有所帮助!
第三章,第四章内容总结 ---Mr yang多态性: 发送消息给某个对象,让该对象自行决定响应何种行为。
通过将子类对象引用赋值给超类对象引用变量来实现动态方法调用。
动态绑定: 一、使用父类类型的引用指向子类的对象; 二、该引用只能调用父类中定义的方法和变量; 三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用) 四、变量没有被重写(覆盖)的概念,”重写“的概念只针对方法,1.方法重载: 在同一个类中定义了两个以上的同名的方法, 但是它们拥有不同的参数列表。
1.1 重载的条件:参数不同 a.个数不相同 b.类型不同 c.顺序不同 注意:与方法的返回类型无关和访问修饰符无关 2.方法重写: 在子类中定义了一个和父类中相同的方法 父类的方法在子类中就被覆盖了(隐藏了). 3.动态绑定: 父类的引用指向子类的对象,如果调用的方法 在子类中被重写,则调用子类重写了的方法。
如果调用的方法在父类中没有定义,则报错。
访问修饰符: 1.public 2.protected 3.private 4.默认的方法修饰符: 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 final 4.接口使用关键字 interface 声明,使用 implements 实现接口. 问题: 接口和抽象的区别 相同点 区别 : 继承 : 代码的可重用性 抽象类 : 代码的灵活性 固定的方法 数据库 接口: 代码的可扩展性
java 访问权限修饰符 public protected default private 用法总结 首先声明:
java 中,default 这个修饰符并没有显式的声明,在成员变量和方法前什么修饰符也不用,默认的就是 default。
为了条理清晰,分三种不同情况来总结。
一 访问权限修饰符修饰成员变量和方法 public:表明该成员变量和方法是共有的,能在任何情况下被访问。
protected:必须在同一包中才能被访问及其子类中可以说的比较简单,看个例子就明白了 eg:class A protected int weight protected int f int aint b // 方法体 假设 B 与 A 在同一个包中,则 class B void g A anew A A.weight100//合法 A.f34 //合法 特别说明:什么是在同一个包中?答:用 package 打包在一起的 class 叫在同一个包中。
不明白,举个例子 eg:在 JDK 的 srcjavaio 中, 第一句源代码都是 package
java.io 你会看到许多
java 类, 没有使用 package 打包的,在同一目录下的类也会被视做同一个包。
default:在这种情况下中,同包中的子类。
区别在第二和第三种情况中。
eg: class A int weight int f int aint b // 方法体 假设 B 与 A 在同一个包中,则 class B void g A anew A A.weight100//合法 A.f34 //合法 private: 只能在本类中访问。
eg: class Test private int money Test money2000 private int getMoney return money public static void mainString args Test tenew Test te.money3000 //合法 int mte.getMoney //合法 System.out.printlnmoneym PS: 实际上,把重要的数据修饰为 private,然后写一个 public 的函数访问它,正好体现了 OOP 的封装特性,是 OOP 安全性的体现。
二 访问权限修饰符修饰类 1,不能用 protected 和 private 修饰类。
2,用 default 修饰的类叫友好类,在另外一个类中使用友好类创建对象时,要保证它们在同一包中。
三 访问权限修饰符与继承 这里的访问修饰符指的是修饰成员变量和方法。
可以分为两种情况: 1,子类与父类在同一包中 此时只有声明为 private 的变量与方法不能被继承访问。
eg: class Father private int money int weight100 class Son extends Father viod f money10000// 非法 weight100 // 合法 2子类与父类不在同一包中 此时 private 与 default 均不能被继承访问, protected 与 public 可以。
eg: Father.
java package com.aaa public class Father int height protected int money120 public int weight protected int getMoney return money void setMoneyint newMoney moneynewMoney Son.
java package com.bbb import com.aaa.Father public class Son extends Father void f money10000//合法 //height170//非法,height 为 default 修饰的变量 System.out.printlnmoney//输出结果是 10000 //setMoney300 //非法 int numbergetMoney //合法 System.out.printlnnumber//输出结果是 10000 public static void mainString args Son sssnew Son sss.f 所以,访问权限修饰符权限从高到低排列是 public protected default private。
Java 中的 abstractstaticfinal 修饰符abstract 修饰符 abstract 使用对象:类、接口、方法 介绍:类中包括没有实现的方法,不能被实例化。
如果是一个 abstract 方法,则方法体为空,该方法的实现在子类中被定义,并且包含一个 abstract 方法的类必须是一个 abstract类 abstract 修饰符表示所修饰的类没有完全实现,还不能实例化。
如果在类的方法声明中使用 abstract 修饰符,表明该方法是一个抽象方法,它需要在子类实现。
在下面的情况下,类必须是抽象类: 1.类中包含一个明确声明的抽象方法 2.类的任何一个父类包含一个没有实现的抽象方法 3.类的直接父接口声明或者继承了一个抽象方法,并且该类没有声明或者实现该抽象方法。
如下例所示: abstract class A1 public 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 Sample static int s13 static int s2 static void display System.out.printlns1s1 System.out.printlns2s2 static System.out.printlnstatic block s2s11 public static void mainString args Sample.display 一旦这个类被调用,所有的静态变量都被初始化,s1 被赋为 3,然后运行 static 块,这将打印出一段消息,并且把 s2 赋为 s11,即 4。
然后解释器调用 main 成员函数,它调用了成员函数 display,该函数输出 s1 和 s2 的信息。
运行结果如下: C:
java Sample static block s13 s24 通过上面的例子还可以看出,一个静态成员函数可以通过它所属的类名来调用。
注意: 在静态成员函数中只能直接调用其它的静态成员函数或引用静态属性,否则会造成编译错误。
静态成员函数中也不能使用 this 或者 super,因为它们是和类的对象相关联的。
final 修饰符 final 使用对象:类、方法、变量 介绍:被定义成 final 的类不允许出现子类,不能被覆盖,字段值不允许被修改。
如果一个类是完全实现的,并且不再需要继承子类,则它可以声明为 Final 类。
如果 final类的名字出现在另一个类声明的 extends 字句的后面就会产生编译错误。
这表明 final 类不能有任何的子类。
类不能同时被声明为 abstract 和 final,因为 abstract 类中的 abstract 方法永远没有机会被实现。
例如: class FinalSample final int MAX_VALUE 100 public static void mainString args FinalSample a new FinalSample System.out.printa.MAX_VALUE 表示,MAX_VALUE 的值为 100,并且不能再更改。
final 变量用大写标识符是一个一般的约定。