面向对象(四)内部类,多态,抽象类,接口

本文介绍了Java编程中的内部类、多态、抽象类和接口的概念与用法。内部类可以直接访问外部类的属性和方法,而多态基于继承,允许父类引用指向子类实例。抽象类包含抽象方法,需由子类实现,不能直接实例化。接口则是一种特殊的抽象类,所有方法无实现体,接口可以多实现,Java 8引入了默认方法和静态方法。
摘要由CSDN通过智能技术生成

|-- final关键字、内部类
|-- 多态
|–抽象类
|-- 接口

内部类:

如何定义内部类:
内部类可以直接访问包裹着它的外部类任何属性和方法(包括私有的)
一般而言,定义内部类,注意的目的,肯定是在包裹着它的外部类中使用它。

面试题:

在这里插入图片描述

package com.openlab.day12.innerclass;

import com.openlab.day12.innerclass.TestInnerClass.Inner01;
import com.openlab.day12.innerclass.TestInnerClass.Inner02;

public class TestInnerClass {
	
	private int id = 10;
	private static String name;
	
	public void say() {
		Inner01 t = new Inner01();
		t.say();
		
	}
	
	
	// 此时Inner01就是TestInnerClass的内部类
	public class Inner01 {
		
		public void say() {
			System.out.println(id);
			System.out.println(name);
			
		}
	}
	
	// 静态类(静态内部类)
	public static class Inner02 extends Outer {
		public void say() {
			TestInnerClass tic = new TestInnerClass();
			System.out.println(tic.id);
			System.out.println(name);
		}
	}

}

class Outer {
	
	public void say() {
//		TestInnerClass tic = new TestInnerClass();
		
		
		// 如果在外界初始化内部类对象
		Inner01 t1 = new TestInnerClass().new Inner01();
		t1.say();
		
		// 如果是静态内部类,可以使用下面方式创建
		Inner02 t2 = new TestInnerClass.Inner02();
		
		
	}
}

静态导入(获取文件后缀名)

package com.openlab.day12.innerclass;

public class Util {
	
	public static final double PI = 3.14;
	
	public static String getSuffix(String path) {
		return path.substring(path.lastIndexOf(".") + 1);
	}
}

package com.openlab.day12.innerclass;

// jdk 1.5提供的新特性,静态导入
import static com.openlab.day12.innerclass.Util.*;

public class Test {

	public static void main(String[] args) {
//		String suffix = Util.getSuffix("c://a.b/c/d.txt");
//		System.out.println(suffix);
		
		String suffix = getSuffix("c://a.b/c/d.txt");
		System.out.println(suffix);
		System.out.println(PI);
	}
}

面向对象三大特征——多态

多态: 一个事务的多种状态

多态是在 继承 的基础上存在的,父类引用 指向 子类实例!!

多态的案例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

多态的案例:
有个人,养了写宠物,宠物可能会生病,治疗宠物
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

抽象类:

如果父类中的方法不需要实现(没有方法体),而是由子类实现的, 该方法就可以声明为抽象方法,抽象方法使用abstract关键字修饰。

如果某个类存在抽象方法,该类必须声明抽象类

一个某个类中存在抽象方法,该类必须是抽象类;
如果一个类是抽象类,它里面的方法不一定是抽象方法!!

抽象方法,本质就是用来继承实现的。

如果一个类,继承了抽象类,没有实现里面的抽象方法,则该类必须也声明为抽象类,由其子类继续实现。 抽象类无法实例化!!!

匿名内部类,来解决抽象类无法实例化的问题!!!

在这里插入图片描述

接口(interface):

java中的接口是一种特殊的抽象类,它里面的所有方法都没有实现

1、接口中成员默认访问修饰符都是public,即便你不写!!!
2、一般接口中不写不同属性,写的要么是常量,要么是一些公共的变量(建议使用static修饰,方便访问)
3、接口中的方法,都是抽象方法,没有实现体。
4、因此接口就是一种特殊的抽象类
在这里插入图片描述

接口的实现类:

在这里插入图片描述

接口的命名规范:

在这里插入图片描述

接口是可以多实现的,一定程度上,不全java单继承的缺点。

在jdk8.0之前,接口中,没有实现了的方法(所有的方法都是没有实现的)!!!
8.0新特性: 1、接口中可以存在默认方法 default关键字来修饰 2、也可以静态方法,也就是说,此时接口就是一个工具类.

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值