JAVA基础知识-this,super,继承,接口

  • this:

    1、表示对当前对象的引用!

    2、表示用类的成员变量,而非函数参数,注意在函数参数和成员变量同名是进行区分!其实这是第一种用法的特例,比较常用,所以那出来强调一下。(this可以访问本类的成员变量,成员方法,构造方法。除构造方法,实际上是从本类开始找(穿透性))

    3、用于在构造方法中引用满足指定参数类型的构造器(其实也就是构造方法)。但是这里必须非常注意:只能引用一个构造方法且必须位于开始!

    还有就是注意:this不能用在static方法中!所以甚至有人给static方法的定义就是:没有this的方法!虽然夸张,但是却充分说明this不能在static方法中使用!

  • super     
  • 1、在子类中,若想调用父类的成员,用super. 来调用(只能在子类中使用)
  • 2、在子类中可以用来访问父类的成员属性和方法,调用父类的构造方法!
  • 3、使用super调用父类构造方的时候必须是第一行的有效代码;不能和this同时使用!

  • 注意:通过用static来定义方法或成员,为我们编程提供了某种便利,从某种程度上可以说它类似于C语言中的全局函数和全局变量。但是,并不是说有了这种便利,你便可以随处使用,如果那样的话,你便需要认真考虑一下自己是否在用面向对象的思想编程,自己的程序是否是面向对象的。
  •  继承

定义:

 1、多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。

 2、多个类可以称为子类,单独这个类称为父类、超类或者基类。

 3、子类可以直接访问父类中的非私有的属性和行为。(依然可以通过get,set方法访问私有的成员)

 4、通过 extends 关键字让类与类之间产生继承关系。

作用:

1、提高了代码的重用性;

2、让类和类产生了联系,为多态提供了前提;

特点:

1、只支持单继承

2、多层继承(多级)

3、父类的私有成员,构造方法不能被继承

注意: 

1、如果类之间存在着:is a 的关系,就可以考虑使用继承。
2、不要为了继承部分功能,而去使用继承。
3、重载:在一个类中,可以定义多个同名的方法,但形参列表不能完全相同。
4、重写:在子类中,可以定义跟父类中一模一样的方法,这样既可以保留父类方法,又可以根据需要改写它
     的具体行为

  • 接口

概念:

在Java中,有一种特殊的类--“接口”,它是一种比“抽象类”更抽象的类,它本质上仍然是一个类。但它内部只能包含:常量和抽象方法。

作用:

可以弥补Java中“单继承”的弊端,可以为子类实现“功能扩展”

例如:几个人团队开发一个项目,项目经理就要求所有人员编写的类中必须包含两个

方法:check(),log()。此时项目经理可以做一个抽象类:

public abstract class Fu{

public abstract void check();

public abstract void log();

}

要求所有的类必须继承这个类:

public class Student extends Fu{

public void check(){

}

public void log(){

}

}

此时,“副项目经理”也有一个要求,要求所有的类中必须有一个方法:show(),由于Java中单继承的限制,无法再次制作“抽象类”被子类继承。这时可以定义一个“接口”,由子类去“实现”,这样就弥补Java中单继承的弊端。

public interface IA{

public abstract void show();

}

子类:

public class Student extends Fu implements IA{

//必须重写抽象父类中的所有方法

public void check(){

}

public void log(){

}

//必须重写接口中的所有抽象方法

public void show(){

}

}

2、接口多态

定义:

定义接口的语法:关键字:interface

示例代码:

public interface IPerson{

..

}

接口中可以包含的成员:(JDK8以前)

公有、静态、常量:常量指:其值不可变的“变量”。不能在代码中改变这个变量的值。成员变量被隐式的声明为:public static final ,这三个关键字都可以不写,编译器会自动添加。

public : 表示“公有”

static : 表示“静态”

final  : 表示“最终的,不可改变的”

公有、抽象方法:必须被修饰为:public abstract,这两个关键字也可以不写,编译器会自动添加。

.示例代码:

public interface IPerson{

public static final int num = 10;

String str = "abc";//隐式的:public static final String str = "abc";

public String add = "aaa";//隐式的:public static final String add = "aaa";

static int v1 = 20;//隐式的:public static final int v1 = 20;

final int v2 = 30;

int v3  = 30;

public abstract void show1();

void show2();//隐式的:public abstract void show2();

public void show3();

abstract void show4();

}

特点:

接口同抽象类一样,不能实例化。就是被子类“实现”,实现功能扩展。

接口编译后,会被生成.class文件。

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页