面向对象(上)
可变个数形参方法
允许定义能和多个实参相匹配的形参,调用时传入的形参个数可以为0,1,2,3.... 可变个数形参的方法无法与数组形参的同名函数进行重载 格式:
public void show(String ... strs){
}
show("123");
show("123","234");//两个调用均可与可变形参函数匹配
权限修饰符
构造器
当类中显式定义了构造函数时,需要手动创建默认构造函数
JavaBean
javaBean是一种Java语言写成的可重用组件。JavaBean是符合以下标准的Java类:
- 类是公共的
- 有一个无参的公共的构造器
- 有属性,有对应的get、set方法
this关键字
用于取得当前对象。可以用this.属性或this.方法的方式调用当前对象的属性或者方法 。 同时,在一个构造器中可以通过this(参数)的方式调用另一个构造器,执行构造器的代码,this()必须写在当前构造器首行
MVC模式
继承性
class Student extends Person{
}
Java不允许多重继承
Object类
如果没有显式地声明一个类的父类,那么其继承于Object类。Java中所有类均直接或间接继承于Object类,可以使用Object类的功能。 Object中的equals和 == 的区别与联系
- == 作用于基本数据类型时,会比较数值大小,相等则返回true; == 作用于引用数据类型时,会比较两个对象的地址值是否相同,即判断是否指向同一个实体
- equals是一个方法,只能对引用数据类型使用。作用原理就是 == 。但String、Date、File等类型对equals进行过重写,能实现我们想要的目标,自定义的类则要自己进行重写equals方法。
重写
在子类中,可以根据需要对父类中的 方法进行改造,在程序执行时,子类将覆盖父类的方法。
重载与重写的区别:
- 定义的区别
- 重载为静态绑定,在编译阶段编译器就能确定调用哪个函数;而重写为动态绑定,只有运行时才能确定调用子类还是父类的方法
super关键字
当子类中重写了父类的某一方法,若依然想在子类中调用父类的未被重写的方法,就可以使用super进行调用:super.XXX()。在子类构造器中可以使用super(参数)的方式调用父类的构造器,且必须声明在子类构造器首行。同时,若子类构造器中没有显示调用this或者super,则会默认使用super( )调用父类构造器(此时父类一定要有一个空参构造器)
多态性
父类的引用指向子类的对象,并且只能调用父类中声明的方法,如果该方法被子类重写过,那么会调用重写后的方法。
例如:Person p=new Man()
虚拟方法调用:
多态的使用前提:类的继承与方法的重写
多态的作用:使用父类的对象来容纳各种子类对象,这样有利于统一处理,减少代码冗余。例如:man和woman继承于person。如果想写一个方法调用man或者woman中的方法,那么如果不使用多态,则需要写两个形参不同的方法。但如果将形参定义为person对象,则可以在函数体中直接调用被重写的方法,且只需要写一个方法即可,这样减少了代码冗余。
instanceof关键字
a instanceof A:判断a是否为A的实例
包装类
针对8种基本数据类型进行的包装后的包装类,使得基本数据类型具有类的特征
基本数据类型、包装类、String之间的相互转化
基本数据类型--->包装类:调用包装类构造器
Integer i=new Integer("123");
Integer i=10;//自动装箱
包装类--->基本数据类型:调用包装类的xxxValue
Integer i = new Integer(a);
int b=i.intValue();
//或者
int c=i;//自动拆箱
基本数据类型、包装类--->String:加""或者调用String.valueOf()
int a=10;
String s=a+"";
//或者
String s1=String.valueOf(a);
String--->基本数据类型、包装类:调用包装类的parseXXX()方法
String s="100";
int a=Integer.parseInt(s);