一·包和访问权限
同包默认或protected
package x;
public class Person {
int age; # or protected int age
}
package x;
public class App {
public static void main(String[] args){
Person p = new Person();
p.age = 100;
System.out.println("kdjkd");
}
}
不同包默认不可访问
private 同包也不可访问
⚠️:默认包权限的是区别于c++的!!!
二·重载
函数重载
package x;
public class Person {
int age;
public int add(int a,int b){
return a+b;
}
public double add(double a,double b){
return a+b;
}
}
构造重载
package x;
public class Person {
protected int age;
public Person(){}
public Person(int age){
this.age = age; //this 引用
}
}
⚠️:如果有自己定义有参数的构造,默认的就不存在了。和c++相同
三·调用自己的构造函数
package x;
public class Person {
protected int age;
public Person(){
System.out.println("default construction");
}
public Person(int age){
this(); //相当于Person() 调用上面没有参数的构造方法
this.age = age; //this 引用
}
}
🈯️:this();这样调用
调用:
Person p = new Person(20);
结果:
default construction
四·Static的运用(c++同吧)
public class Person {
static int age;
}
调用
Person.age = 30;
Person p1 = new Person();
Person p2 = new Person();
System.out.println(p1.age+" "+p2.age);
结果:
30 30
⚠️:c#里面对象不支持访问静态的参数~~~
⚠️:我们的静态函数是不能访问到 非static的变量–>可能涉及到没对象生成就用this访问了
正确演示
package x;
public class Person {
static int age;
public static void SetAge(int age1){
age = age1;
}
}
调用:
Person.SetAge(20);
System.out.println(Person.age);
结果:
20
五·静态代码块
static{ }
package x;
public class Person {
static int age;
static {age = 20;}
}
六·继承
⚠️:区分重载 (overload)和 重写(override)
c++中的继承
class Dog:public Animal
- 简单继承
package x; public class Animal { String name; void shout(){ System.out.println("animal shout!"); } }
package x; class Dog extends Animal { //C++ : class Dog:public Animal void printName(){ System.out.println("name="+name); } }
调用:
public static void main(String[] args){ Dog dog = new Dog(); dog.name = "XX"; dog.printName(); }
- shou重写
package x; class Dog extends Animal { //C++ : class Dog:public Animal void printName(){ System.out.println("name="+name); } void shout(){ System.out.println("dog shout"); } }
- super. —>对应c++中 Animal::
package x; class Dog extends Animal { //C++ : class Dog:public Animal void printName(){ System.out.println("name="+name); } void shout(){ super.shout(); System.out.println("dog shout"); } }
- Super 和 构造函数
package x; public class Animal { String name; void shout(){ System.out.println("animal shout!"); } Animal(String name){ this.name = name; } }
package x; class Dog extends Animal { //C++ : class Dog:public Animal void printName(){ System.out.println("name="+name); } void shout(){ super.shout(); System.out.println("dog shout"); } Dog(){ super("Dog"); } }
- Super 的父类 的值
⚠️:看setAge 和 printAge
package x; public class Animal { int age; String name; void shout(){ System.out.println("animal shout!"); } Animal(String name){ this.name = name; } }
package x; class Dog extends Animal { int age; //C++ : class Dog:public Animal void printName(){ System.out.println("name="+name); } void shout(){ super.shout(); System.out.println("dog shout"); } Dog(){ super("Dog"); } void setAge(int age){ super.age = age; } void printAge(){ System.out.println(super.age); } }
七·Object
-
equals 判断内容相等
-
hashCode
H(x1) = y1 & H(x2) = y2
X1 != x2. --> y1 != y2
-
toString(). -->任何对象都能转。记得重写!!!
不然如下:
System.out.println(dog.toString());
输出 x.Dog@6e0be858 解释: x:包 Dog:类名 @:位于
重写:
⚠️:一定要public 因为object里的toString本来就是public了吧
public String toString(){ return "Dog~~toString"; }
-
finalize(). --> delete的时候会自动调用