面向对象-补充说明(static,抽象类,接口,内部类)
面向对象-补充说明(static,抽象类,接口,内部类)
在上面我们已经接触到了面向对象的类和对象
接下来我们讲解一下static,抽象类,接口,内部类:
static
我们先从基本的static讲起:
- static:属于类,可直接调用或采用 类.方法()调用
- 非static:属于对象,只能采用 对象.方法()调用
在static扩展中我们将讲到匿名代码块和静态代码块
这两者可写于类中:
public class application {
//匿名代码块
{
System.out.println("匿名代码块");
}
//静态代码块
static {
System.out.println("静态代码块");
}
//构造方法
public application(){
System.out.println("构造方法");
}
//main函数
public static void main(String[] args) {
application app = new application();
}
}
结果:
静态代码块
匿名代码块
构造方法
我们可以看到在类的产生过程中,各部分的生成先后顺序是:静态代码块,匿名代码块,构造方法。
抽象类
概念:
- 抽象类中可以包含未被定义的抽象方法,有利于后者重构
抽象定义:
public abstract class 抽象类名{
...
//抽象类中可包含未被定义的抽象方法
public abstract void 抽象方法名();
...
//抽象类中也可包含定义的方法
public void 抽象方法名();
...
}
代码展示:
//abstract象征抽象,这里指抽象类,抽象类可以含有抽象方法和具体方法
public abstract class A {
//abstract象征抽象,这里指抽象方法,抽象方法不需要写方法体。(有抽象方法就要保证是抽象类)
public abstract void run();
public void say(){
System.out.println("hello");
}
}
//这里B继承A,保证B里面有A的抽象方法的全部重构
public class B extends A{
public void run(){
System.out.println("run");
}
}
//这里C继承A,把C也定义为抽象类可以保证C称为A的子类
public abstract class C extends A{
}
抽象类总结:
- 抽象类可以没有抽象方法;但抽象方法一定属于抽象类
- 抽象类不能使用new来创建对象,只能由子类继承
- 抽象方法只有方法的声明,没有方法的方法体,由子类书写
- 子类继承抽象类,要么实现抽象类的所有抽象方法,要么子类本身也是抽象类
- 子类只能继承一个抽象类;但子类可以继承多个接口
接口
普通类,抽象类,接口的区别:
- 普通类:只有具体实现
- 抽象类:具体实现抽象方法都有
- 接口:只有抽象方法
接口定义:
//interface标识接口
public interface UserSerivce{
//在接口类中定义一些方法,不需要写方法体
//方法默认为public,abstract
void run();
//接口方法可设置参数
String setName(String name);
}
接口继承方法:
//接口继承采用implements,可继承多个接口,需要补充继承接口的所有方法
public class UserServiceImpl implements UserSerivce,TimeSerivce{
public void run(){
}
public String setName(String name){
return "ccc";
}
public void jump(){
}
}
接口作用:
- 约束作用
- 定义方法,分组实现
接口注意点:
-
所有接口都是public abstract
-
所有属性都是public static final
-
接口不能被实例化,接口中没有构造方法
-
implement 可以实现多个接口
-
必须重写接口的方法
内部类(拓展)
内部类定义:
- 在一个类的内部再定义一个类
内部类在后面我们会再提起,所有这里先讲述一种类型:成员内部类
概念:
- 定义在一个类里面的另一个类
//成员内部类
public class A {
private int id;
public void out(){
System.out.println("成员外部类");
}
public class Inner{
public void in(){
System.out.println("成员内部类");
}
public void getID(){
System.out.println(id);
}
}
}
成员内部类可以直接使用外部类的private属性
public class application {
public static void main(String[] args) {
//定义外部类
A a = new A();
a.out();
//用外部类来实化内部类
A.Inner aa = a.new Inner();
aa.in();
aa.getID();
}
}
结束语
好的,这节的重点主要在抽象类和接口,好好掌握