专业知识 | JAVA面向对象知识点总结

2018-10-17 15:36

1.类与对象的概念:类就像是一个模板,而对象是类的一个实例化对象。拿生活中的例子来说,类就是一张设计图纸,而对象就是根据这张图纸建造出来的实物。


2.面向对象的三大特征:封装、继承、多态。


封装:把同一类事物所具有的共同属性和共同行为功能抽取到Java类中的过程称为封装并将类里面的数据和行为进行保护。常用方法为:设置数据的访问修饰符为private,这样外部的事物就不能随意更改类中的数据。


继承:子类继承父类的所有非private成员。


多态:关于多态需要记住三句话:


(1)父类类型的变量可以指向子类类型的对象。


(2)能够调用什么方法取决于变量的类型。


(3)具体调用什么方法取决于对象的类型。


什么意思呢?举个例子:假设父类类型是地球人,子类类型是中国人。


代码:


 class DiQiuRen{


pulbic void speak(){


System.out.println("我是地球人");


}


}


class Chinese extends DiQiuRen{


@override       


public void speak(){


System.out.println("我是中国人");     //子类重写父类的speak()方法


 


}


public void baiNian(){


System.out.println("过年好!");


}


}


public class Main{


public static void main(String[] args)


{


DiQiuRen dqr=new Chinese(); //根据多态中的第一句话,父类类型变量可以指向子类对象,即父类类型变量dqr指向子类对象


dqr.baiNian();//这句代码是有问题的,因为根据多态中第二句话,能够调用什么方法取决于变量的类型,而变量类型是地球人,可以调用的方法只有speak()方法,没有baiNian()方法。


dqr.speak();//这句代码的执行结果是“我是中国人”。解析:根据多态中第三句话,具体调用什么方法取决于对象的类型。在这里,对象的类型是中国人,所以具体执行的speak()方法是中国人类里的speak()方法。


3.对象间的关联关系


可以以对象作为一个类的成员变量。


例如:


有Dog类:


public class Dog{


private String name;


public String getName()


{


return name;


}


public void setName(String name)


{


this.name=name;


}


}


有Person类:


class Person(){


private Dog pet;


public Dog getPet()


{


return pet;


}


public void setPet(Dog pet)


{


this.pet=pet;


}


public void sayHello()


{


if(this.net==null)


{


System.out.println("我没有宠物");


}


else


{


System.out.println("我的宠物是:"+pet.getName());


}


}


}


Main类:


public class Main{


  public static void main(String[] args)


{


Person p=new Person;


Dog d=new Dog();


d.setName("旺财");


p.setPet(d);//设置对象间的关联关系


p.sayHello();


}


 


}


4.包的作用


(1)避免类重名


(2)便于管理不同用途的类


注意,包的命名:包名小写,公司域名反.产品名.模块名


例如:百度的域名是:www.baidu.com


包名则是:com.baidu.www


5.关于final的用法:


(1)final修饰局部变量表示这个变量只能被赋值一次;


(2)final类型的方法不能被重写;


(3)final类型的类不可以被继承。String 类就是final类。


6.静态static:


有时候想定义一些不和具体对象关联、不需要new就可以调用的方法(不访问成员变量的方法就可以定义成static 方法);


一些场景下会要求一个类的多个实例共享一个成员变量。这时候就要用到static。


(1)static方法可以直接通过类名.方法名调用,而非static方法则需要new。


(2)static成员不可以访问非static成员,而非static成员可以访问static成员;


static与final连用时表示常量:值不可改变且全局共享。


7.抽象类与接口


抽象类的特点:


(1)抽象方法没有方法体,连空方法体都不能有;一旦类中有抽象方法,这个类一定要被修饰为抽象类;


(2)抽象类是不可以被实例化的类;


 (3)抽象类可以没有抽象方法;


(4)抽象类的子类必须实现父类的所有抽象方法,除非抽象类的子类也是抽象类。


接口的特点:


(1)接口中不能声明普通成员变量,只能声明static成员变量;


(2)接口可以继承其他接口。


相同点:都有抽象方法


不同点:(1)抽象类中可以定义方法的实现(这个方法不是抽象方法),接口中一定不能定义接口的实现;


               (2)一个类只能继承一个父类,而一个类可以实现多个接口;


                (3)接口中不可以定义成员变量,而抽象类中可以定义成员变量。


8.匿名内部类


有时候创建一个类的子类只是为了创建一次它的对象,声明一个子类很麻烦,可以直接new 类名(){//类体};


这样就是相当于声明一个了这个类的子类,并创建了这个子类的对象。


注意:匿名内部类的this问题:类中的this指的是匿名内部类的对象,如果想要指外部的对象,要用“类名.this”.


9.equals和==


==运算时用于比较两个是否是同一个对象。如果要比较对象的内容是否相等,要调用equals()方法,返回true表示相等,false表示不相等。


10.类的静态代码块


静态代码块在类第一次被使用时执行一次,且在构造函数之前执行,一般用于对类进行初始化。


11.枚举类型


枚举类型的地位和类和接口是一样的!


为什么要有枚举?答:限定一个数据的可选值方向。例如:方向


(1)枚举声明:public enum Dir{


Left,Right,Up,Down


}


(2)枚举类型的赋值:Dir d=Dir.Left;


(3)枚举类型的变量相等使用==就可以

Copyright2018贵州自由客网络技术有限公司版权所有 黔ICP备16000950号