您的位置:首页 > 编程语言 > Java开发

Java之面向对象

2018-03-18 09:41 246 查看
1.引用
    C c1 = new C();
    c1 是一个局部变量 存储在stack
    new C();存储在heap  c1指向该对象  java中的对象是通过引用对其操作的
    C是一个类,是静态的概念,存储在代码区 
例如:
Class C{
    int i;
    int j;
    main(){
C c1 = new C();
C c2 = new C();
    }
}
stack              heap       code segment
 c1      --->     c1.i,c1.j       class C
 c2      --->     c2.i,c2.j
 2.构造方法内存
 Class B{
int i;
int j;
B(int _i,int _j){
i = _i;
j = _j;
}
main(){
B b = new B(1,2);
}
 }
 内存中:
 stack       heap     
 b          i=1 j=2
 _i:1
 _j:2

 方法中参数也是局部变量(方法执行完后,局部变量就没了) _i _j 赋值后就销毁了 b指向对象
3.方法重载 overload

    方法名相同,参数类型、参数个数不同

4.
 Person p = new Person(21);
 int age = 25;
 p.setAge(age++);   会先把值取出来赋给p.age,然后自身+1
 stack           heap

  age:25->26
  p                25
5.static 静态变量存在date seg中
  不能在静态方法里调用非静态变量

  6.package必须放在代码的第一行
 7.继承
  子类创建对象时,堆内存中包含父类的对象

  重写 override  方法名,参数类型参数个数,返回值类型必须和父类一致,并且访问权限不能比父类更加严格。
 8.继承中的构造方法(重点)
 (1).子类调用构造方法过程中必须调用其父类的构造方法(在内存中子类new时也包含父类对象,所以必须也调用父类构造方法)
 (2).子类可以在自己的构造方法中使用super();调用父类的构造方法
 使用this();调用本类另外的构造方法
 如果使用super();必须放在子类构造方法的第一行
 (3).如果在子类构造方法里没有显式的调用父类的构造方法,则默认调用父类无参构造方法,

 若父类没有无参构造方法,则编译出错
 9.Object所有类的基类
 (1)toString()方法
 例如:Son son = new Son();  syso...(son);  输出:Son@15db9742  Son是类名,@连接符   后面是16进制在内存的hashcode编码
 输出对象时,默认调用了Object的toString()方法,所以建议所有的类重写该方法。
 (2)finalize()方法  一般是GC时调用该方法
 (3)hashcode解释:它独一无二的代表了一个对象,并且可以通过它在内存中找到该对象
 (4)equals()方法  一般比较两个对象时 ==  比较的是引用(内存地址) Object的equals()方法比较的也是引用
 若想比较内容,需要重写equals方法   String就是重写了equals方法,可以比较内容而不是引用。

 关键字 instanceof   看是否属于哪个类  c1 instanceof Cat   
 10.对象转型
 (1)父类的引用可以指向子类的对象
 (2)父类的引用不可以访问子类新增的成员
 (3)可以用 引用型变量 instanceof 类名 来判断该引用类型变量所指向的对象是否属于该类或该类的子类
 (4)子类的对象可以当做父类的对象来使用叫做向上转型,反之叫做向下转型
 对象上转型:
Animal a = new Dog();
父类的引用指向了Dog对象,但是a在内存中只能看到Dog对象中父类的对象,看不到子类的数据

Dog b = (Dog)a; 强制转换可以让b都看到
 11.多态
  多态的三个必要条件
  (1)要有继承
  (2)要有重写
  (3)父类引用指向子类对象
  动态绑定:在执行期间(非编译期间)判断其引用的实际类型,根据其实际的类型去调用相应的方法
  方法存在代码区

  多态有很好的扩展性
12.抽象类
  我们知道多态中父类的方法内容其实是没有必要写的,因为子类迟早会重写,所以我们只要定义就可以了,所以
  出现了抽象abstact方法,一个类有个残缺的方法,这个必须也得是抽象的,残缺的类不能被实例化
  有以下规则:
  (1)含有抽象方法的类必须是抽象类,抽象类必须被继承,抽象方法必须被重写
  (2)抽象类不能被实例化

  (3)抽象方法只需被声明,不需要实现
13.final关键字
  (1)修饰的变量值不能被修改
  (2)类不能被继承

  (3)方法不能被重写
14.接口 interface
  (1)接口内只有常量和方法的定义
变量是public static final默认修饰的  因为之前C++的多继承有多个父类具有同样的成员变量,子类调用时会出问题,
java用次解决该问题,static是公共的
  (2)可以多实现
  (3)具有和继承一样的多态特性
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: