java面向对象笔记
面向对象总结
?
面向对象考虑的问题
?
1、不考虑过程、先考虑哪些对象
?
2、类和对象有哪些属性和方法
?
3、类之间的关系
?
?
Dog d = new Dog()
对象d的引用放在栈内存中
对象d的属性和方法堆内存(动态)
?
成员变量放在内存中的数据区
?
局部变量占用一块内存(即栈内存),方法调用完后,局部变量消失
?
new对象占用两块内存(即栈内存和堆内存)
?
成员变量有默认值,作用范围是整个类;局部变量没有默认值,作用范围是整个方法
?
方法就是一块静态代码,只有在执行的时候,才内存里分配空间;非静态方法是针对每个对象进行调用的
?
?
《方法的重载》
方法的重载是指一个类中可以定义有相同的名字,但参数不同的多个方法。
(与方法的访问控制修饰符无关)
(返回类型要一致,其它条件成立,返回类型不一致时构成重名,此时编译不通过)
调用时,会根据不同的参数表选择相应的方法。
?
《this关键字》
当必须指出当前使用方法的对象是谁时要使用this;
有时使用this可以处理方法中成员变量和参数重名的情况;
this可以看作是一个变量,它的值是当前对象的引用。
?
《static关键字》(静态变量存放在内存的数据区)
·在类中,用static声明的成员变量为静态成员变量,它为该类的公用变量,在第一次使用时被初始化,
对于该类的所有对象来说,static成员变量只有一份。
·用static声明的方法为静态方法,在调用该方法时,不会将对象的引用传递给它,所以在static方法中不可访问非static的成员。
·可以通过对象引用或类名(不需要实例化)访问静态成员。
?
《package和import语句》
·为便于管理大型软件系统中数目众多的类,解决类的命名冲突问题,Java引入包(package)机制,提供类的多重类命名空间。
《J2SDK中主要的包介绍》
·java.lang--包含一些java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能。
·java.awt--包含了构成抽象窗口工具集的多个类。
·java.applet--包含applet运行所需的一些类。
·java.net--包含执行与网络相关的操作的类。
·java.io--包含能提供多种输入/输出功能的类。
·java.util--包含一些实用工具类,如定义系统特性、使用与日期日历相关的函数。
?
《访问控制》
修饰符类内部同一个包子类任何地方
privateyes
defaultyesyes
protectedyesyesyes
publicyesyesyesyes
(对于class的权限修饰符只可以用public和default,public类可以再任意地方被访问,default类只可以被同一个包内部的类访问)
?
《继承》
java中使用extends关键字实现类的继承机制;通过继承,子类自动拥有了基类(superclass)的所有成员(成员变量和方法);
java只支持单继承,不允许多继承:一个子类只能有一个基类,一个基类可以派生出多个子类。
?
《方法的重写》
在子类中可以根据需要对从基类中继承来的方法进行重写;
重写方法必须和被重写方法具有相同方法名称、参数列表和返回类型;
重写方法不能使用比被重写方法更严格的访问权限。
?
《继承中的构造方法》
子类的构造的过程中必须调用其基类的构造方法。
子类可以在自己的构造方法中使用super(argument_list)调用基类的构造方法。
·使用this(argument_list)调用本类的另外的构造方法;
·如果调用super,必须写在子类构造方法的第一行。
如果子类的构造方法中没有显式地调用基类构造方法,则系统默认调用基类无参数的构造方法。
如果子类构造方法中既没有显式调用基类构造方法,而基类中又没有无参数的构造方法,则编译出错。
?
《Object类中的equals》
提供定义对象是否“相等”的逻辑;
x.equals(y)当x和y是同一对象时返回true否则返回false;
即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。?
“==”比较的是对象的地址;也就是说Object中equals和“==”是一样的。
?
《对象转型》
·一个基类的引用类型变量可以“指向”其子类的对象;
·一个基类的引用不可以访问其子类对象新增加的成员(属性和方法);
·可以使用引用变量instanceof类名来判断该引用型变量所“指向”的对象是否属于该类或该类的子类;
·子类的对象可以当作基类的对象来使用称作向上转型(upcasting),反之称为向下转型(downcasting);
·多态的条件:1、要有继承;2、要用重写;3、父类引用指向子类对象。