Java 面向对象基础 以及进阶知识 总结
private: 仅仅可以在自己的类中使用
public: 哪里都可以用
protected: package-private 就是在同一个包下都可以使用,并且在别的包下继承他的子类中也可以使用。
no-modifier: package-private 只能在同一个包下使用( 对于同一包下 与protected 相同)。在别的包不行。
Overriding 重写和 Overloadding 重载
Overriding: 是用于子类与父类之间,除了函数体变化外其他的全部不变。且子类overriding的access controller 不能高于父类。
Overloadding: 是对于同类中,方法之间。 参数列表必须改变,返回类型可以改变或不改变。
Polymorphism 多态
大体上可以理解为
ParentClass obj = new ChindClass(); //A
ChildClass obj2 = new ChildClass(); //B
ChildClass obj3 = new ParentClass(); //C 错误例子
交给大家一个窍门,为什么会有这个设定。对于A, 我们声明了ParentClass那么我们就相当于在内存中给ParentClass中的变量和方法分别开了房间, 当我们new 的时候,就比如实际来了人 来了ChildClass, 因为ChildClass中的变量 和 方法数量一定是 大于或者等于ParentClass中的,所以我们之前开的房间都住满了,那么酒店很开心,订了多少住了多少。 对于C中, 我们预定了ChildClass中的变量和方法的房间,但是实际来的人是ParentClass,数量明显小于ChildParent中的人,那么订的住不满,酒店就很生气,给你报了错。
overriding and overloadding 是多态的重要体现形式。
Abstract Class 抽象类
abstract class 能含有或者不含有 abstract函数, abstract 函数必须用 abstract 关键字来修饰。
只要一个类含有一个abstract 函数那么就必须对这个类使用abstract 关键字来修饰。相同的在它的子类中。
Interface 接口
接口就是比abstract 类更极端的东西。它里面的所有方法必须都是 abstract 方法, 不能含有instance field, 对于所有的constant 比如int等必须是 static 和 final的。
implement 它的必须是 实现所有的abstract方法就和abstract 一样了。
Java Advanced Knowledge
Generic Class
很简单通过下面的例子很明显。比如arraylist或者hashmap中都是generic的。
package Generic; //generic class public class GenericMethodTest< A,Z > { //generic variable public A a; public void setA( A a) { this.a = a; } //generic methods public A getA () { return this.a; } public void printArray ( Z[] inArray) { for ( Z temp : inArray) { System.out.println(temp); } } public static < B > void printArray_2 (B[] inArray) { for (B temp : inArray) { System.out.println(temp); } } }
package Implement; import Generic.GenericMethodTest; public class a{ public static void main (String[] args) { GenericMethodTest<Integer,String> gm = new GenericMethodTest<Integer,String>() ; gm.setA(10); String[] ss = {"aaa", "bbb", "ccc"}; Double [] bb = {1.0, 2.0, 3.0}; gm.printArray(ss); gm.printArray_2(ss); gm.printArray_2(bb); } }
Serialize 串行化
串行化简单来讲就是转变存在的 实例化的对象 转化成 byte数组的 一种技术或者过程。它有很多好处,请看。
http://*.com/questions/2232759/what-is-the-purpose-of-serialization-in-java
简单的串行化,可以根据下面的代码来学习下。
注意: 对于一些我们不想串行化的 区域 我们可以使用关键字 transient 来修饰。
package Serialize; import java.io.*; public class Employee implements Serializable{ public String name; public String address; public transient int SSN; public int number; public void mailCheck (){ System.out.println("Mailing a check to "+ name + " " + address); } }
package Serialize; import java.io.*; public class SerializeDemo { public static void main (String[] args) { Employee e = new Employee(); e.name = "Reyan df"; e.address = "New York, ManhaThan"; e.SSN = 1234433224; e.number = 101; try { FileOutputStream fileOut = new FileOutputStream ("/Users/huazhe/Desktop/demo.ser"); ObjectOutputStream out = new ObjectOutputStream (fileOut); out.writeObject(e); out.close(); fileOut.close(); System.out.println("Serialization done..."); } catch (IOException i){ System.out.println(i); } } }
package Serialize; import java.io.*; public class DeserializaDemo { public static void main (String[] args) { Employee e = null; try { FileInputStream fileIn = new FileInputStream("/Users/huazhe/Desktop/demo.ser"); ObjectInputStream in = new ObjectInputStream (fileIn); e = (Employee) in.readObject(); in.close(); fileIn.close(); } catch (IOException i) { System.out.println(i); } catch (ClassNotFoundException c) { System.out.println(c); } System.out.println("Name: " + e.name); System.out.println("Address: " + e.address); System.out.println("SSN: " + e.SSN); System.out.println("Number: " + e.number); } }
以上就是Java 面向对象基础 以及进阶知识 总结的详细内容,更多请关注其它相关文章!
上一篇: 深入解析mysql.sock不见的问题_MySQL
下一篇: smarty?section循环报错