JAVA
一、继承
1.定义:继承是对某一批类的抽象。
2.作用:
(1)可以实现更好的建模。
(2)提高代码的复用性。
3.特点:
(1)子类继承父类,可以得到父类的全部属性和方法
(除了父类的构造方法);
(2)如果定义一个类时,没有调用extends,则它的父类是:java.lang.Object.
注:
(1)JAVA中类只有单继承。
(2)一个类只能有一个直接父类。
例如:
public class Animal{
String name;
public void run(){
System.out.println("跑!");
}
public void eat(){
System.out.println("吃!");
}
}
class Mammal extends Animal{
public void tiger(){
System.out.println("老虎”);
}
}
4.方法的重写:
(1)定义:在子类中可以根据需要对从基类中继承来的方法进行重写。
(2)重写方法必须和被重写方法具有相同的方法名称,参数列表和返回类型。
(3)重写方法不能使用比被重写方法更严格的访问权限。(由于多态)
例如:
public class Animal{
String name;
public void run(){
System.out.println("跑!");
}
public void eat(){
System.out.println("吃!");
}
}
class Bird extends Animal{
//重写
public void run(){
System.out.println("飞!");
}
}
5.Object类
(1)Object类是所有JAVA类的根基类。
(2)如果在类的声明中未使用entends关键字指明其基类,则默认基类为Object类。
6.toString方法:
(1)默认返回:包名+类名+@+哈希码。
(2)toString方法可以重写,哈希码根据对象内存位置生成,唯一不重复。
7.super关键字:
(1)定义:super是直接父类的引用,可以通过super来访问父类中被子类覆盖的方法或属性。
(2)在普通方法中,没有顺序限制。
(3)在构造函数中,若是构造函数的第一行代码没有显示调用super关键字,那么会默认调用。
class Bird extends Animal{
public void run(){
super.run();
System.out.println("飞!");
}
}
8.组合:继承和组合都可以实现复用,但组合比继承更灵活。
(is-a关系用继承,has-a关系用组合)
public class Animal{
String name;
public void run(){
System.out.println("跑!");
}
}
class Bird2{
Animal2 animal2=new Animals2();
public void run(){
animals2.run();
System.out.println("飞!");
}
}
二、封装
1.定义:隐藏对象内部的复杂性,只对外公开简单的接口。
(1)private同一个类可见。
(2)default同一个类,同一个包可见。
(3)protected同一个类,同一个包,子类可见。
(4)public同一个类,同一个包,子类,所有类可见。
2.作用:
(1)提高系统的可扩展性,可维护性。
(2)可进行数据检查,从而有利于保证对象信息的完整性。
3.封装要点:
(1)类的属性处理:一般使用private。(除非本属性确定会让子类继承)
(2)一些只用于本类的辅助性方法可以用private。
(3)希望其他类调用的方法用public。
三、多态
1.作用:
(1)用来实现动态联编。(程序的最终状态只有在执行过程中才能被决定而非在编译期间就决定了)
(2)提高系统的灵活性和扩展性。
2.存在条件:要有继承,要有方法重写,父类引用指向子类对象。
例如:
public class Animal{
public void voice(){
System.OUT.println("普通动物声音");
}
}
class Cat extends Animal{
public void voice(){
System.out.println("喵");
}
}
class Dog extends Animal{
public void voice(){
System.out.println("汪");
}
}
public statis void Animalvoice(){
c.voice();
}
public static void main(String[] args){
Animal a=new Cat();
Animal b=new Dog();
Animalvoice(a);
Animalvoice(b);
}
3.instanceof运算符
(1)特点:前一个操作数通常是一个引用类型变量,后一个操作数通常是一个类。
(2)作用:在进行强制类型转换之前,首先判断前一个对象是否是后一个类的实例,是否可以成功转换。