java 面向对象 上

来源:互联网 发布:淘宝账号封了怎么办 编辑:程序博客网 时间:2024/04/29 22:34

5.1类和对象 参考书籍 java 讲义

静态成员不能直接访问非静态成员

public class StaticAccessNonStatic{
public void info(){
System.out.println("简单的info方法")
}
public static void main(String[] args){
//因为main()方法试试静态方法,而info()是非静态方法
//调用main()方法的是该类本僧,而不是该类的实例
//因此省的this无法指向有效的对象
info();
}
}

编译上面的程序,系统提示在info();代码行出现以下错误: 
无法从静态上下稳重引用非静态方法info();

5.2 方法详解

方法不能独立定义,方法只能在类体里定义。 
从逻辑意义上来看,方法要么属于该类本身,要么属于该类的一个对象。 
永远不能独立执行方法,执行方法必须使用类或对象作为调用者。

递归

一个方法体内调用自身,被称为方法递归。 方法递归存在隐式循环,它会重复执行某段代码,但这种循环无需循环控制。

public class Recursive{
public static int fn(int n){
if(n == 0){
return 1;
}else if(n == 1){

return n += 1;
}else{
//方法中调用它自身,就是方法递归
return fn(n + 2) * fn(n)
}

}
public static void mian(String[] args){
System.out.println(fn(10));
}
}

方法重载

Java 允许同一个类定义多个同名方法,只要形参列表不同就行,如果同一个类中包含了两个或者两个以上的方法名相同,但形参列表不同,则被称为方法重载。

成员变量和局部变量

成员变量指的是在类定义的变量,也就是前面所介绍的field; 局部变量指的是在方法里定义的变量。不管是成员变量还是局部变量,都应该遵守相同的命名规则:从语法角度来看,只要是一个合法的标识符即可:但从程序可读性角度来看,应该是多个有意义的单词连缀而成,其中第一个单词首字母小写,后面每个单词首字母大写。

Alt text

5.4隐藏和封装

封装是面向对象的三大特征之一(另外两个是继承和多态),它指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。

1.对于一个类或对象实现良好的封装,可以实现以下目的。
2.隐藏类的实现细节
3.让使用者只能通过事先预定的方法来访问数据,从而可以在该方法里加入控制逻辑,限制对成员变量的不合理访问。
4.可以进行数据检查,从而有利于保护对象信息的完整性。
5.便于有修改,提高代码的可维护性。为了实现良好的封装,需要从两个方面考虑。
1.将对象的成员变量和实现细节隐藏起来,不予许外部直接访问。
2.把方法暴露出来,让方法来控制对这些成员变量进行安全的访问和操作。

因此,疯长实际上有两个方面的含义:吧该隐藏的隐藏起来,把该暴露的暴露出来。这两个方面需要通过使用 Java 提供的访问控制符来实现。

访问控制符

private (当前类访问权限):如果类里的一个成员(包裹成员变量、方法和构造器等)使用 private 访问控制符来修饰,则这个成员只能在当前类的内部访问。很显然,这个访问控制符用于修成员变量最合适,使用它来修饰成员变量就可以把成员变量隐藏在该类的内部。 
default(包访问权限):如果类里面的一个成员(包括成员变量、方法和构造器等)或者一个外部类不使用任何访问修饰符,就称它是包访问权限的,default 访问控制的成员或外部类可以被相同包下的其他类访问。 
protected(子类访问权限):如果一个成员(包括成员变量、方法或构造器等)使用protected 访问控制修饰,那么这个成员既可以被同一个包中的其他类访问,可以被不同包中的子类访问。在通常情况下,如果使用 protected 来修饰一个方法,通常是希望其子类来重写这个方法。
public (公共访问权限):这是最宽松的访问控制级别,如果一个成员(包括成员变量、方法和构造器等)或者一个外部类使用 public 访问控制符修饰,那么这个成员或外部类就可以被所有类访问。 
Alt text

5.6类的继承

5.6.1 继承的特点

Java 的继承通过 extends 关键字来实现,实现继承的类被称为子类,被继承的类被称为父类,有的也称其为基类、超类。父类和子类的关系,是一种一般和特殊的关系。例如水果和苹果的关系,苹果继承了水果,苹果是水果的子类,则苹果是特殊的水果。 
Java 里子类继承父类的语法格式如下:

修饰符 class SubClass extends SuperClass{
//类定义部分
}

Java 语言摒弃了 C++ 中难以理解的多继承特征,即每个类最多只有一个直接父类。

5.7 多态

Java 引用变量有两个类型:一个编译时类型,一个是运行时类型。编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。如果编译时类型和运行时类型不一致,就可能出现多态。

public class Vehicle{
public void test(){
System.out.println("父类方法_交通工具");
}
}

public class Bicycle extends Vehicle{
public void test(){
System.out.println("自行车");
}
}
public class Car extends Vehicle{
public void test(){
System.out.println("小汽车");
}
}

public class ConversionTest{
public static void main(String[] arg){
Vehicle vB = new Bicycle();
Vehicle vC = new Car();
vB.test();//自行车
vC.test();//小汽车
}
}

instanceof 运算符

instanceof 运算符的前一个操作数通常是一个引用类型变量,后一个操作符通常是一个类(也可以是接口,可以把接口理解为特殊的类),它用于判断前面的对象是否是后面的类,或者其子类、实现类的实例。如果是则返回true,否则返回false。

原创粉丝点击