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()的源码,作用就是打印他的地址结果为java.lang.Object@161cd475,源码也可以被重写 * 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"); } }