java面向对象(2)--继承

extends关键字

1)通过extends关键字可以实现类的继承;

2)子类可以继承父类的成员变量及成员方法,同时也可以定义自己的成员变量和成员方法;

3)java语言不支持多重继承,一个类只能继承一个父类,但一个父类可以有多个子类。

继承中的构造方法

1)子类的构造方法中必须通过super关键字调用父类的构造方法,这样可以妥善的初始化继承自父类的成员变量。

2)如果子类的构造方法中没有调用父类的构造方法,编译器会自动的加入对父类无参构造方法的调用(如果该父类没有无参的构造方法,会有编译错误)。

注意:super关键字必须位于类构造方法的第一行

class Goo extends Foo{
  Goo(int value,int num){
      super(value);  //初始化继承自父类的value成员变量
      this.num=num; 
}
    
}

 

父类的引用指向子类的对象

1)一个子类的对象可以向上造型为父类的类型,即,定义父类型的引用可以指向子类的对象。如:Foo obj=new Goo(100,3);

2)父类的引用可以指向子类的对象,但通过父类引用只能访问父类所定义的成员,不能访问子类的扩展的部分

方法的重写

1)子类可以重写(覆盖)继承自父类的方法,即方法名和参数列表与父类的方法相同;但方法的实现不同;

2)当子类对象的重写方法被调用时(无论是通过子类引用还是通过父类的引用调用),运行的都是子类的重写后的版本。

3)子类在 重写父类方法时,可以通过super关键字调用父类的版本。

重载与重写的区别

1)重载与重写是完全不同的语法现象,区别如下:

---重载是指在一个类中定义多个方法名相同但参数列表不同的方法,在编译时,根据参数的个数和类型来决定绑定那个方法。

---重写是指在子类中定义和父类完全相同的方法,在程序运行时,根据对象的类型不同(而不是引用类型)而调用不同的版本。

2)重载遵循所谓“编译期绑定”,即在编译时根据参数变量的类型判断应该调用那个方法;因为:变量obj的类型为Super,因此:Goo的g(Super)被调用。

3)重写遵循所谓“运行期绑定”,即在运行的时候根据引用变量指向的实际对象类型的调用方法。因为:obj实际指向的是子类的对象,因此:子类重写后的f方法被调用。

封装的意义

1)对外提供可调用的,稳定的功能;

2)封装容易变化的,具体的实现细节,外界不可以访问,这样的意义在于:

----降低代码出错的可能性,便于维护;

----当内部的实现细节改变时,只要保证对外的功能定义不变,其他的模块就不会因此而受到牵连。

访问修饰符

public和private

1)private修饰的成员变量和方法仅仅只能在本类中调用;

     public修饰的成员变量和方法可以在任何地方调用,

public修饰的内容是对外提供可以被调用的功能,需要相对稳定;private修饰的内容是对内实现的封装,如果“公开”会增加维护的成本。

 

protected和默认访问控制

1)用protected修饰的成员变量和方法可以被子类及同一个包中的类使用。

2)默认访问控制即不书写任何访问控制符。默认访问控制的成员变量和方法可以被同一个包中的类使用。

 

访问控制符修饰类

1)对于类的修饰可以使用public和默认方式。public修饰的类可以被任何一个类使用;默认访问控制的类只可以被同一个包中的类使用。

2)protected和private可以用于修饰内部类。

 

static 和 final

static关键字

1)static修饰的成员变量不属于对象的数据结构;

2)static变量是属于类的变量,通常可以通过类名来引用static成员;

3)static成员变量和类的信息一起存储在方法区,而不是在堆中,一个类的static成员变量只有“一份”,无论该类创建了多少对象。

static修饰方法

 1)通常的方法都会涉及到具体对象的操作,这些方法在调用时,需要隐式的传递对象的引用(this)。

2)static修饰的方法则不需要针对某些对象进行操作,其运行结果仅仅与输入的参数有关,调用时直接用类名引用。

3)由于static在调用时没有具体的对象,因此在static方法中不能对非static成员(对象成员)进行访问。static方法的作用在于提供一些“工具方法”和“工厂方法”等。

static块

static块:属于类的代码块,在类加载器期间执行的代码块,只执行一次,可以用来在软件中加载静态资源。

final关键字

final修饰变量

1)final关键字修饰成员变量,意为不可改变。

2)final修饰成员变量,两种方式初始化:

 ----声明同时初始化

 ----构造函数中初始化

3)final关键字也可以修饰局部变量,使用之前初始化即可。

final修饰方法

1)final关键字修饰的方法不可以被重写。

2)使一个方法不能被重写的意义在于:防止子类在定义新方法时造成不经意的重写。

final修饰类

1)final关键字修饰的类不可以被继承。

2)JDK中的一些基础类库被定义为final的。例如:String,Double,Math,Integer等。

3)使一个类不能被继承的意义在于:可以保护类不被继承修改,可以控制滥用继承对系统造成的危害。

static final常量

1)static final修饰的成员变量称为常量,必须声明同时初始化,不可被改变。

2)static final常量会在编译期被替换。

相关面试题:

final, finally ,finalize的区别

1)final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。

内部类要访问局部变量,局部变量必须定义成final类型。

2)finally是异常处理语句结构的一部分,表示总是执行,用来释放资源。

3)finalize是Object类的一个方法,在垃圾回收器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供的垃圾收集时的其他资源回收,例如关闭文件等。JVM不保证次方法总被调用

 

posted on 2017-08-21 22:02  左夕  阅读(134)  评论(0)    收藏  举报

导航