25
2018
11

JAVA学习-面向对象编程之继承、super关键字、方法重写、final关键字

面向对象编程之继承、super关键字

继承

继承的思想是基于已存在的类来构建新类

在Java中,除Object类之外,所有类都是子类,都有唯一的父类

Java中用extends关键字表示继承

类之间的关系

Is-a 继承体现

Has-a 组合体现

Like-a 实现接口体现

继承的意义

代码重用

体现不同的抽象层次

父子类关系

父类更抽象,更一般

子类更具体,更特殊

super关键字

super代表的是父类对象的引用

当子父类的成员出现同名时,可以通过super来进行区分

子类的构造方法中,通过super关键字调用父类的构造方法(必须是子类构造方法第一条语句)

面向对象编程之方法重写、final关键字

方法重写(override)

方法重写是指子类可以根据需要对从父类继承来的方法进行改写,是多态机制的前奏

方法重写注意点:

重写方法必须和被重写方法具有相同的方法签名(方法名称、参数列表、返回值一样)

重写方法不能比被重写方法的访问权限低

父类中的私有方法不能被重写

在子类重写方法中继续调用父类被重写的方法可以通过调用super.函数名()调用

final关键字

final可以用来修饰变量、方法、类。

final修饰的变量是一个常量,一旦赋值就不能再修改。(常量一般都和static关键字配合使用)

final修饰类代表此类不能被继承。

final修饰方法代表方法不能被重写。


Demo:

public class TeacherDemo
{
public static void main(String[] args){
test1();
test2();
test3();
}
public static void test1(){
B b=new B();
b.showA();
b.showB();
System.out.println("——————————————————————————————————");
}
public static void test2(){
JavaTeacher javaTeacher = new JavaTeacher("张三","JavaSchool");
javaTeacher.teaching();
DBTeacher dbTeacher = new DBTeacher("王五","DBSchool");
dbTeacher.teaching();
System.out.println("——————————————————————————————————");
}
public static void test3(){
C c = new C();
//c.number1=10;//编译出错,常量不能被修改
c.showNumber1();
//D d=new D();
//d.showNumber2();
final C c2 = new C();//c2不能再改变指向
c2.number2=20;//c2成员操作方法不变
c2.showNumber2();
System.out.println("——————————————————————————————————");
}
}
//继承测试1
class Teacher{
private String name;
private String school;
public Teacher(String name,String school){
this.name=name;
this.school=school;
}
public void teaching(){
System.out.println(school+","+name+"老师 准备上课");
}
}
class JavaTeacher extends Teacher{
public JavaTeacher(String name,String school){
super(name,school);//调用父类的构造方法
}
public void teaching(){
super.teaching();
System.out.println("Java教学");
}
}
class DBTeacher extends Teacher{
public DBTeacher(String name,String school){
super(name,school);//调用父类的构造方法
}
public void teaching(){
super.teaching();
System.out.println("DB教学");
}
}
//继承测试2
class A{
public A()
{
System.out.println("构造函数A()");
}
public void showA(){
System.out.println("父类showA");
}
public void showB(){
System.out.println("父类showB");
}
}
class B extends A{//B类继承自A
public B(){
super();//默认会加无参数构造方法,可省略
System.out.println("构造函数B()");
}
public void showA(){
System.out.println("子类showA");
}
public void showB(){
super.showB();//调用父类的showA方法
System.out.println("子类showB");
}
}
//final测试
class C{
public final int number1 = 1;
public int number2 =2;
public void showNumber1(){
System.out.println(number1);
}
public final void showNumber2(){
System.out.println(number2);
}
}
class D extends C{//final class C 编译报错,final类不能被继承
//public void showNumber2(){//编译报错,final方法不能被重写
//System.out.println(number2);
//}
}


效果:



版权声明:
作者:真爱无限 出处:http://www.pukuimin.top 本文为博主原创文章版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接.
« 上一篇下一篇 »

相关文章:

评论列表:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。