Java 也是面向对象的语言,具有 封装 继承 (用 关键字 extends) 多态

类的 修饰符有  public  final abstract (或者完全省略)

 定义类,成员变量, 方法,构造器  (等同于C#), 不同的是 java 多了一个修饰符 final

Public class Person {}
PerSon p;
P = new Person();

P 是一个变量,存储在栈内存里, 它指向一个内存地址 (person 的真正对象,存储在 堆内存中) 

方法参数: 是 值类型传递, 注意 参数类型是 值类型还是引用类型    (引用类型变量指向的是对象)  

public static void Swap(int a, int b)
{
int temp =0;
temp = a;
a=b;
b=temp;
 
System.out.println("a:" + a +";b:" + b);       
          }
 
In main method:
                      int a = 1;
int b = 2;
 
Swap(a, b);
        
System.out.println("a:" + a +";b:" + b);   //output 1,2

可变的形参参数个数  String… books.

可变的参数 必须放到方法的最后面参数中, 它等同于一个数组

public static void TestMethod(int a, String... books)      //等同于定义   TestMethod(int a, String[] books)
{
for(String temp : books)
{
            System.out.println(temp);
}
 
System.out.println(a);
}

 方法的重载 (不能用返回值类型的不同来作为方法的重载)   //因为系统会糊涂 不知道调用哪个

Int f()
Void f()

当调用方法 直接写  f(), 系统会糊涂,不知道调用哪个 

Java可以用 类对象来访问 类成员变量(static),但是不推荐用,为了不造成混淆

class Test
    {
        public static string Name;
    }
 
New Test().Name   //可以访问 不推荐      C#是不可以访问的

访问修饰符   private default (=C# internal)   protected public   (从小到大) 

package Hello;    类似于 C#的命名空间, 可以区分 同名类
Import    类似于C#的 using     import.Lee.Sub.Hello   (lee.Sub 是 packge名字, Hello是 class 名字)
Import.static    导入静态类成员或方法

 继承:

Java 通过关键字  extends 来做继承    class1 extends class

Java 通过关键字 super 来访问 父类的被重写(隐藏)的成员变量

子类调用父类构造器用关键字  super  (C#用base) 

多态   (实例变量不具备多态性)

引用变量有两种类型, 编译时类型和运行时类型

如: Person person= new Student();     person 运行时是 Student类型, 但 编译时 是 Person 类型

当调用 方法的时候,会执行 student里的方法, 但当调用成员变量的时候执行的是 Person 的变量 (实例变量不具备多态性) 只有方法具有多态性

public class BaseClass
{
public int book = 6;
 
public void Base()
{
        System.out.println("This is one Base method");
}
 
public void Test()
{
System.out.println("This is one base's Test method");
}
} 
 
public class SubClass extends BaseClass
{
public String book = "This is Sub class book veriable";
 
public void Test()
{
System.out.println("This is one Sub's Test method");
}
 
public void Sub()
{
System.out.println("This is one Sub method");
}
 
 
public static void main(String[] args)
{
BaseClass bc = new BaseClass();
bc.Base();   //print the "This is one Base method"
 
SubClass sc = new SubClass();
sc.Test();    //print the "This is one Sub's Test method"
sc.Base();    //print the  "This is one Base method"
 
BaseClass ploymophicBC = new SubClass();
                     ploymophicBC.Test();   //print the "This is one Sub's Test method"
ploymophicBC.Base();    //print the  "This is one Base method"
 
        System.out.println(ploymophicBC.book);    //prinit the 6
}
}

 

java 对拍程序 java pair of_System

 

关键字instanceof,  在进行强制转换之前,先判断前一个对象是否是后一个类的实例,是否可以转换成功 (和 C#中的 is)  只能在有继承关系的对象类之间用

String a = 11 + "";
boolean isInteger = a instanceof Object;      //返回 true
 
int i = 0;
boolean isI = i instanceof String;     //编译出错,int 和 String 没有任何继承关系

Final 关键字作用,父类方法不想被子类重写,可以用此关键字 

继承和组合  继承是表达 is a的关系, 组合表达的是 has a 的关系 (继承破环了 封装)