Java基础总结6(面向对象三大特性、常用修饰符、抽象类、接口)

文章目录

      • 面向对象三大特性
        • 封装性
        • 继承性
        • 多态性
      • 常用修饰符
        • 访问控制修饰符
          • public、private、protected、default
        • 非访问控制修饰符
          • static
          • final
          • abstract
      • 抽象类和抽象方法
      • 接口(interface)
      • 接口和抽象类的区别

面向对象三大特性

封装性

概念:把类当中的一些重要信息保护起来,不暴露给外界
体现:private关键字设置属性、方法私有

继承性

概念:子类继承父类,获得父类的一些属性和方法
体现:子类extend父类,实现类implements接口
注意:
1、继承类是单继承,继承接口是多继承
2、子类的直接父类只有一个,父类的子类可以有多个

多态性

概念:多态意思为多种形态,父类的方法在子类中表现为多种具体实现形态
体现:例如一个动物类,有一个方法是吃东西,它的子类有猫和狗。猫和狗都实现了它吃东西的方法,猫吃鱼,狗吃骨头。这就体现了父类方法在子类中有多种实现形态
注意:
1、多态性的三个必要条件:继承性、重写方法、父类引用指向子类对象
2、成员方法才有多态性,成员变量不具有多态性
例如:

class fu{
    int num=10;
    void method(){
        System.out.println("fufufu");
    }
}
public class zi extends fu{
    int num=20;
    void method(){
        System.out.println("zizizi");
    }
    public static void main(String[] args) {
    	//父类引种指向子类对象
        fu f=new zi();
        //成员方法具有多态性
        f.method();		//zizizi
        //成员变量不具有多态性
        System.out.println(f.num);		//10
    }
}

对象的上溯造型
概念:父类引用指向子类对象
例如:父类类名 对象名 = new 子类类名();
缺点:对象一旦转为父类,将无法使用子类中新扩展的方法和属性
解决方法:下溯造型
注意:只有子类才能上溯为父类,两个普通类之间不能随意转换

对象的下溯造型
概念:将父类引用重新还原为子类对象
例如:子类类名 对象名 = (子类类名) 父类引用;
注意:只有曾经上溯过对象才能进行下溯,不允许没有经过上溯,直接下溯,否则会抛异常

常用修饰符

访问控制修饰符

public、private、protected、default

Java基础总结6(面向对象三大特性、常用修饰符、抽象类、接口)_第1张图片
总结:
1、类前面的控制修饰符只能是public或者不写。不写就默认是default,default类的不同包的类不能访问它。
2、

	  priavte         本类可见

      public          所有类可见

      protected       本包和所有子类都可见(本包中的子类非子类均可访问,不同包中的子类可以访问,不是子类不能访问)

      default         本包可见(即默认的形式)(本包中的子类非子类均可访问,不同包中的类及子类均不能访问)



非访问控制修饰符

static

static可以修饰类的成员方法和成员变量
static修饰的成员变量是静态成员变量,static修饰的成员方法是静态成员方法
注意:
1、static不能修饰类
2、静态成员方法不能直接调用非静态的成员方法和成员变量,需要通过类名或者对象名调用

final

final可以修饰类、变量和方法
final修饰的类是最终类,不能被继承,也就是没有子类
final修饰的方法是最终方法,不能被重写覆盖
final修饰的变量只能被赋值一次,且必须要赋值使用(因为不赋值,接收默认值后就不能重新赋值,因此需要赋值,否则会报错)

abstract

abstract用来修饰类和方法,被修饰的类成为抽象类,修饰的方法成为抽象方法
注意:抽象类中不一定有抽象方法,但是有抽象方法的类一定是抽象类

抽象类和抽象方法

如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。

抽象类的定义格式:
抽象方法所在的类,必须是抽象类才可以。在class之前写上abstract即可

抽象方法:就是方法前面加上abstract关键字,去掉大括号,直接分号结束(不能实现方法,只是定义方法)

//抽象类
public abstract class A{
	//抽象方法abstract void eat();

}

如何使用抽象类和抽象方法:
1、不能直接new抽象类对象
2、必须用一个子类来实现抽象父类
3、子类要实现它所有抽象类的方法
4、通过子类对象进行使用

注意事项:
1、抽象类不能创建对象
2、抽象类中可以有构造方法
3、抽象方法所在的类一定是抽象类,但抽象类中不一定包含抽象方法
4、抽象类的子类必须重写父类的所有抽象方法


接口(interface)

接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。

接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。

接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。

接口定义的基本格式:

public interface 接口名称{//接口内容
}

备注:换成了关键字interface之后,编译生成的字节码文件还是.java->.class

Java7及以下版本,接口可以包含的内容有:
1、常量
2、抽象方法

Java8版本新增内容:
3、默认方法
4、静态方法

Java9版本新增内容:
5、私有方法

接口中定义抽象方法:
public abstract 返回值类型 方法名称(参数列表);

注意事项:
1、接口当中的抽象方法,修饰符必须是两个固定的关键字:public abstract(不能改成其他关键字)
2、两个关键字public abstract,可以省略,编译器会自动加上。

接口的使用:
1、接口不能直接使用,必须要有一个实现类实现接口
public class 实现类名称 implements 接口名称{
​ //…
}

2、接口的实现类必须实现接口中的所有的抽象方法
3、通过实现类的对象调用接口方法

注意事项:
如果是实现类并没有实现接口中所有的抽象方法,那么这个实现类自己就必须是抽象类

接口默认方法定义

public default 返回值类型 方法名称(参数列表){

​ //方法体

}

备注:接口当中的默认方法,可以解决接口的升级问题

接口的默认方法,可以通过接口实现类对象,直接调用

接口的默认方法,可以被接口实现类进行覆盖重写


接口静态方法定义:

public static 返回值类型 方法名称(参数列表){

​ //方法体

}

注意事项:

1、接口实现类对象不能调用接口的静态方法

正确用法:通过接口名称,直接调用其中静态方法

接口的私有方法定义:

1、可以定义普通私有方法(解决多个默认方法之间重复代码问题)

2、可以定义静态私有方法(解决多个静态方法之间重复代码问题)

接口常量定义:

public static final 数据类型 常量名称 = 数据值;

一旦使用final关键字修饰,说明不可改变

注意:

1、接口常量,可以省略public static final,但是不写默认也是常量

2、接口常量必须要赋值,不能不赋值,必须手动赋值

3、接口常量名称规范要用大写字母,多个单词时要用下划线分割

总结:JDK9开始的版本,接口内容有:

1、成员变量其实是常量

2、接口中最重要的是抽象方法

实现类必须实现接口所有的方法,除非实现类是抽象类

3,Java7开始,接口里允许定义抽象方法和常量

4、Java8开始,接口里允许定义默认方法,静态方法,接口实现类对象不能调用接口的静态方法

5、Java9开始,接口里允许定义私有方法(普通私有方法、静态私有方法)

6、接口是没有静态代码块和构造方法的

7、一个类的直接父类只有一个,一个类却可以实现多个接口。

8、如果是实现类所是实现的多个接口中,存在重复的抽象方法,那么只需要覆盖重写一次即可

9、如果是实现类所是实现的多个接口中,存在重复的默认方法,那么必须对冲突的方法进行覆盖重写

10、一个类如果直接父类当中的方法,和接口当中的默认方法产生了冲突,那么优先使用父类中的方法(继承优先于接口实现)

接口中多继承:

1、类和类之间是单继承的。直接父类只有一个。

2、类和接口之间是多实现的。一个类可以实现多个接口。

3、接口和接口之间是多继承的。

注意:

1、多个父接口当中的抽象方法重复,没关系

2、多个父接口当中的默认方法重复,有关系

子接口必须进行默认方法的覆盖重写,而且带着default关键字

3、继承父类,子类是可以使用父类的静态方法、静态常量,实现接口,子类不可以使用接口的静态常量、静态方法

接口和抽象类的区别

1、抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。

2、抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。

3、 一个类只能继承一个抽象类,而一个类却可以实现多个接口。

你可能感兴趣的:(Java,抽象类,java,多态,封装,接口)