1.包機制(package):

域名倒着寫。
執行個體說明如下:
/**
* import的使用方法
* author :Wang
*
*
*/
package cn.wang;//包必須是非注釋語句的第一句
import project02.user;//先是包名後是類名"包名.*"是全部導入,導入的這個包必須是public類型的才行 同一個包内可以直接使用裡面的類
import java.util.Date;
import java.sql.*;//他和上面那一行都有Date這個類
import static java.lang.Math.*;//導入Math的所有靜态屬性;
public class testImport {
public static void main(String[] args) {
user u2 = new user();
project02.testClass u3 = new project02.testClass();//要是沒有導入的話就要指明這個類的位址
Date d = new Date();//這時候會預設調用指向明了的java.util.Date
java.util.Date d2 = new java.util.Date();//這樣就可以清楚的說明調用的是哪一個類
System.out.println(PI);//因為導入了靜态的他 是以不用加字首了
}
}
2.面向對象的三大特征:
這章的學習方法:溫新而知故
(1).繼承(extends)
注意:Java的接口可以多繼承,但是他的類隻能單繼承;
每個類都預設為是Object的子類;(類一般首字母大寫),可以在選中類以後用crtl加T可以看一個類的關系(繼承結構);
A instanceof B 判斷A是不是B的執行個體對象;
package cn.wang;
/**
*
* 測試extends
* @author HP
*
*/
public class Person {
String name;
int age;
public void rest() {
System.out.println("我想要休息一會。");
}
public static void main(String[] args) {
Student stu = new Student();
stu.name = "wangtong";
stu.rest();
System.out.println(stu.name);
System.out.println(stu instanceof Person);
System.out.println(stu instanceof Student);//instanceof 判斷這個對象就是不是Student類的執行個體化;
}
}
class Student extends Person{
int height;
public void study() {
System.out.println("學習兩個小時");
}
}
3.重寫(override)
package cn.wang;
/**
* 測試重寫
* @author Wang
*
*/
public class TsetOverride {
public static void main(String[] args) {
House a = new House();
a.stop();//調用父類的stop()
a.run();//調用自己重寫的run()
}
}
class Vehical{
public void run() {
System.out.println("滴滴滴 的跑");
}
public void stop() {
System.out.println("刹車");
}
public Person passenger() {//直接調用一個包下面的Person類
return new Person();
}
}
class House extends Vehical{
public void run() {//重寫父類的run
System.out.println("策馬奔騰");
}
public Student passenger() {//這裡重寫的傳回值可以是Person的子類Student而不能是Person的父類Object;
return new Student();
}
}
4.Object類的toString
package cn.wang;
/**
* 測試Object
* @author Wang
*
*/
public class TestObject {
public static void main(String[] args) {
Object obj = new Object();
System.out.println(obj.toString());
/* 這個是tostring()的源碼,作用就是列印他的位址結果為[email protected],源碼也可以被重寫
* public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}*/
}
}
5.equals
package cn.wang;
/**
* equals的測試與重寫
* @author Wang
*
*/
public class TestEquals {
public static void main(String[] args) {
User u1 = new User(1,"wang");
User u2 = new User(1,"wang");
System.out.println(u1.equals(u2));
System.out.println(u1 == u2);//==相等的條件是看他們的位址是否相等
/*
public boolean equals(Object obj) {//這是equals的源碼 預設的是與==一樣的判斷位址
return (this == obj);
}
*/
}
}
class User{
int id;
String name;
public User(int id ,String name) {
this.name = name;
this.id = id;
}
public boolean equals(Object obj) {//但在我們的實際開發中,通常會認為兩個對象的内容相等時,則兩個對象相等,equals傳回true。對象内容不同,則傳回false 是以對他進行重寫
if(this == obj) //如果地值相等肯定就是相等的
return true;
User other = (User)obj;//将傳過來的對象強制轉化成User類型的對象 因為 你的重寫是為User重寫的傳進來的對象肯定是User類型的
if(id == other.id) {
return true;
}
return false;//注意這個要傳回的代表整個函數的傳回要是沒有就報錯;
}
}
注意: 請仔細閱讀注解;
6.繼承樹的追溯:super()
/**
* 測試super和繼承樹的追溯;
* @author Wang
*
*/
public class TestSuper {
public static void main(String[] args) {
Child C = new Child();//構造Child類的時候就是先構造他的根類Object然後構造Father最後構造自己 和static的初始化塊(對類進行初始化)一樣
C.run();
}
}
class Father {
Father(){
System.out.println("FatherClass Construct.");
}
public void run() {
System.out.println("Father Run");
}
}
class Child extends Father{
Child(){
super();//構造方法的第一句總是他 不管你寫不寫
System.out.println("ChildClass Contruct.");
}
public void run() {
super.run();//調用父類中被子類override的run();
System.out.println("Child Run");
}
}