15-11-28 java 类和对象的理解(上)

来源:互联网 发布:linux用户账号新建 编辑:程序博客网 时间:2024/05/16 08:58


1. 类是一种抽象的概念,对象是类的一种具体表现形式,是具体的概念.先有类,然后由类来生成对象(Object).对象又叫做实例.


2. 类由两大部分构成:属性及方法.属性一般用名词表示,方法一般用动词表示.


3. 如果一个源文件里定义了多个类,那么这些类中最多只能有一个类是public 的,换句话说定义的多个类可以都不是Public的.
      
4. 在java中进行方法的传递时,无论传递的是原生类型数据还是引用类型,参数传递方式统一是传值.java中没有传引用的概念.


5. 方法重载(Overload).表示俩个或多个方法名字相同,但方法参数不同.方法参数不同有两层含义:
a) 参数个数不同. 
b) 参数类型不同.  注意:
方法的返回值对重载没有任何影响.


6. 构造方法重载: 只需看参数即可.如果想在一个构造方法中调用另外一个构造方法,那么使用this()的方式调用,this()括号中的参数表示目标构造方法的参数.this()必须要作为构造方法的第一条语句,换句话说,this()之前不能有任何可执行的代码.


7. 继承(Inheritance).java是单继承表示一个类只能从另一个类继承(被继承的类叫做父类[基类,base class]继承的类叫做子类), java中的继承使用extends关键字表示.

      

8. 当生成子类对象时,java默认首先调用寻找父类的不带参数的构造方法.然后执行该构造方法,生成父类的对象.
       接下来,再去调用子类的构造方法,生成子类对象.要想生成子类的对象,首先生成父类的对象.没有父类对象
       就没有子类对象.


9. super表示对父类对象的使用,this表示对当前类的使用.


10.   如果子类使用super()显示调用父类的某个构造方法,那么在执行的时候就会寻找与super()所对应的构造方法而不会再去寻找父类的不带参数的构造方法.与this一样,super也必须作为构造方法的第一条语句,super之前不能有任何可执行的代码.



11. 关于继承的3点:
1) 父类有的,子类也有.
2) 父类没有的,子类可以增加.
3) 父类有的,子类可以改变.


12. 关于继承的注意事项
a) 构造方法不能被继承
b) 方法和属性可以被继承
c) 子类的构造方法隐式的调用父类不带参数的构造方法
d) 当父类没有不带参数的构造方法,子类需要使用super来显式调用父类的构造方法,super指的是对父类的引用.
e) super关键字必须是构造方法中的第一行语句.


13. 方法重写(Override):  子类与父类的方法返回类型一样,方法名称一样,参数一样,这样我们说子类与父类的方法构成了重写关系. 


14. 方法重写与方法重载之间的关系: 重载发生在一个同一个类内部的两个或多个方法.重写发生在父类与子类之间.


15. 当两个方法形成重写关系时,可以在子类方法中通过super.run();形式调用父类的run()方法,其中super.run()不必放在第一行语句,因为此时父类对象已经构造完毕,先调用父类的run()方法还是先调用子类的run方法是根据程序的逻辑决定的.
        


16. 在定义一个类的时候,如果没有显式指定该类的父类,那么该类就会继承于java.lang.Object类(JDK提供的一个类,Object类是java中所有类的直接或间接父类).


17. 多态(Polymorphism):   我们说子类就是父类(玫瑰是花,男人是人),因此多态的意思是:父类型的引用可以指向子类的对象.


18. 多态: 父类型的引用可以指向子类型的对象.


19. Parent p = new Child();当使用多态方式调用时,首先检查父类中是否有sing()方法,如果没有则编译错误;如果有再去调用子类的sing()方法.


20. 多态类型转换的两种方式:
a) 向上类型转换(upcast): 比如说将Cat类型转换为Animal类型,即将子类转换为父类型.对于向上类型转换,不需要显式指定.

b) 向下类型转换(downcast): 比如将Animal类型转换为子类型.对于向下类型转换,必须要显式指定(必须要使用强制类型转换).例poly3.

public class Poly3{public static void main(String[] args){Fruit f = new Pear();Pear p = (Pear)f;p.grow();}}class Fruit{public void run(){System.out.println("fruit is running");}}class Pear extends Fruit{public void run(){System.out.println("pear is running");}public void grow(){System.out.println("pear is growing");}}


(本文中一些方法是例子)










0 0