计算机系统应用教程网站

网站首页 > 技术文章 正文

Java 面向对象基础 以及进阶知识 总结

btikc 2024-09-11 01:59:17 技术文章 13 ℃ 0 评论

Controlling Access to Members of a Class.

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的。


  1. package Generic;
  2. //generic class
  3. public class GenericMethodTest< A,Z > {
  4. //generic variable
  5. public A a;
  6. public void setA( A a) {
  7. this.a = a;
  8. }
  9. //generic methods
  10. public A getA () {
  11. return this.a;
  12. }
  13. public void printArray ( Z[] inArray) {
  14. for ( Z temp : inArray) {
  15. System.out.println(temp);
  16. }
  17. }
  18. public static < B > void printArray_2 (B[] inArray) {
  19. for (B temp : inArray) {
  20. System.out.println(temp);
  21. }
  22. }
  23. }

  1. package Implement;
  2. import Generic.GenericMethodTest;
  3. public class a{
  4. public static void main (String[] args) {
  5. GenericMethodTest<Integer,String> gm = new GenericMethodTest<Integer,String>() ;
  6. gm.setA(10);
  7. String[] ss = {"aaa", "bbb", "ccc"};
  8. Double [] bb = {1.0, 2.0, 3.0};
  9. gm.printArray(ss);
  10. gm.printArray_2(ss);
  11. gm.printArray_2(bb);
  12. }
  13. }

Serialize 串行化

串行化简单来讲就是转变存在的 实例化的对象 转化成 byte数组的 一种技术或者过程。它有很多好处,请看。

http://stackoverflow.com/questions/2232759/what-is-the-purpose-of-serialization-in-java

简单的串行化,可以根据下面的代码来学习下。

注意: 对于一些我们不想串行化的 区域 我们可以使用关键字 transient 来修饰。


  1. package Serialize;
  2. import java.io.*;
  3. public class Employee implements Serializable{
  4. public String name;
  5. public String address;
  6. public transient int SSN;
  7. public int number;
  8. public void mailCheck (){
  9. System.out.println("Mailing a check to "+ name + " " + address);
  10. }
  11. }

  1. package Serialize;
  2. import java.io.*;
  3. public class SerializeDemo {
  4. public static void main (String[] args) {
  5. Employee e = new Employee();
  6. e.name = "Reyan df";
  7. e.address = "New York, ManhaThan";
  8. e.SSN = 1234433224;
  9. e.number = 101;
  10. try {
  11. FileOutputStream fileOut =
  12. new FileOutputStream ("/Users/huazhe/Desktop/demo.ser");
  13. ObjectOutputStream out = new ObjectOutputStream (fileOut);
  14. out.writeObject(e);
  15. out.close();
  16. fileOut.close();
  17. System.out.println("Serialization done...");
  18. } catch (IOException i){
  19. System.out.println(i);
  20. }
  21. }
  22. }
  23. package Serialize;
  24. import java.io.*;
  25. public class DeserializaDemo {
  26. public static void main (String[] args) {
  27. Employee e = null;
  28. try {
  29. FileInputStream fileIn = new FileInputStream("/Users/huazhe/Desktop/demo.ser");
  30. ObjectInputStream in = new ObjectInputStream (fileIn);
  31. e = (Employee) in.readObject();
  32. in.close();
  33. fileIn.close();
  34. } catch (IOException i) {
  35. System.out.println(i);
  36. } catch (ClassNotFoundException c) {
  37. System.out.println(c);
  38. }
  39. System.out.println("Name: " + e.name);
  40. System.out.println("Address: " + e.address);
  41. System.out.println("SSN: " + e.SSN);
  42. System.out.println("Number: " + e.number);
  43. }
  44. }

multithreading 多线程

用的不多,用的时候再看。谢谢。

有问题欢迎指出。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表