什么是对象?
我们常说万物皆对象,对象是类的实例,是一组属性的集合。
什么是面向对象?
面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。
面向对象的三大特性
1.封装性:
简单的理解就是藏起来,用对象把属性装起来就是一种封装。如:
public class Pojo {
private String userName;
private String passwd;
public Pojo() {
}
public Pojo(String userName, String passwd) {
this.userName = userName;
this.passwd = passwd;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
}
2.继承性
1.在java里面只能单继承,继承的关键字是extends,子类能继承父类的非private的属性和方法(构造器除外,父类的构造
器,子类只能使用super关键字调用),子类能在继承父类的基础上,加入自己的属性和方法。
2.子类能重写父类的方法,这也就是编译时多态。能自动向上转型,如:Person student=new Student(),学生类是子类,
能直接向上转型,如果是向下转型,则要强转,如:Student person=(Student)new Person()。
3.我们可以用A instanceof B判断A是不是B的子类。在使用向上转型的时候,编译看左边,运行看右边
也就是说Person student=new Student()中,student对象只能调用父类中继承过来的方法,子类独有的方法不能调用。
4在继承关系中,会先初始化父类,再初始化子类;如果子类对象只调用了父类的静态变量,则只会引起父类的初始化,子类不会初始化。
5.子类也能继承父类的静态方法,但是要用类名去调用。父类和子类的初始化顺序为:先父类的静态变量和静
态代码块->子类的静态变量和静态代码块->父类中普通成员变量和代码块->父类的构造函数->子类中普通成员变量和代码
块->子类的构造函数。
3.多态性
1.多态主要就是两个,一个是编译时多态(重写),另一个是运行时多态(重载)。通俗的理解多态:人有:医生,教师,学生......。叫声有:狗叫,猫叫,猪叫......。
2.重写和重载的区别
重载是在一个类中的,比如:
public class Test(){
int add(int a,int b) {
}
int add(int a,int b,int c){
}
}
重写是子父类中的,比如:
//父类
public class Person {
public void say(){
System.out.println("hello world");
}
public void doSome(){
System.out.println("吃完饭");
}
}
//子类
public class Student extends Person{
public void play(){
System.out.println("打篮球");
}
//重写父类方法
@Override
public void doSome() {
System.out.println("写作业");
}
}
两个函数是不是重载关系不是通过返回值决定的,也跟权限修饰符无关,只是跟参数列表有关,参数列表有:参数个数不
同,参数的顺序不同,参数的类型不同。
对于重写来说,子类重写了父类的方法,那么重写的这个方法的权限修饰符要比父类大,返回值类型也要相同,方法和参
数也要一模一样,但是方法体中的内容不必相同