java基础(三)

final 修饰局部变量

  • 基本数据类型 , 是值不能被改变
  • 引用数据类型, 是地址值不能被改变, 对象中的属性可以改变
  • final可以修饰形参

抽象类定义

  • 抽象方法没有具体的代码实现, 只是规定了方法的基本属性, 然后由子类去实现具体的代码
    • 抽象类可包含=抽象方法+普通方法(含代码实现,否则报错)
    • 被abstract修饰的类
  • 抽象方法必须放在抽象类中
  • 抽象类无法被实例化(不能new)
  • 抽象类主要是为了定义规则而存在的,让接口与实现分离

特点

  • 抽象类和抽象方法必须用abstract 关键字修饰
    • abstract class 类名{}
    • abstract 返回值类型 方法名();
  • 抽象类不一定有抽象方法, 有抽象方法的类一定是抽象类或者接口
  • 抽象类不能实例化, 必须由子类继承并重写抽象方法来实例化
  • 抽象类的子类
    • 要么是抽象类
    • 要么重写抽象类中的所有抽象方法(普通类)

接口定义

  • 接口其实就是抽象类的升级版, 接口里面都是抽象方法
  • 从狭义上将来说, 接口就是指java 中的interface
  • 从广义上的角度讲对外提供规则的都是接口
  • 接口就是一套标准的规范(规则)
  • 意义:
    • 实现代码的高内聚,低耦合
    • 弥补java类 单一继承的缺陷

特点

  • 接口用关键字interface表示
    • interface 接口名{ }
    • 接口中方法上的abstract关键字可以省略
  • 类实现接口用implements表示
    • class类名 implements 接口名{ }
  • 接口不能实例化
    • 接口按照多态的方法实例化

类与接口的关系

类与接口

  • 实现关系,可以单实现, 也可以多实现, 在继承类的同时,可以多实现

  • 多个接口中出现了名称和参数列表相同的方法, 但是返回值不同, 会报错

  • class JavaTeacher extends Teacher implements School
    

类与类

  • 单继承

接口与接口

  • 单继承与多继承

可不可以实现接口但不重写所有的抽象方法?

可以,代码如下

  • 案例

  • package com.qianfeng.test;
    
    public class Demo05 {
    	public static void main(String[] args) {
    		
    	}
    }
    interface A{
    	void B();
    
    }
    abstract class B implements A{
    //虽然A类接口的抽象方法实现,需要靠B类,但是B类为抽象类,所以只能依靠其它继承B的非抽象方法来实现方法
    	
    }
    

内部类

  • 定义在类内部的类成为内部类

内部类分类

  • 成员内部类
    • 普通成员内部类
    • 静态成员内部类

局部内部类

定义

  • 定在在类中的方法中的内部类叫做局部内部类(用的很少)

使用

  • 局部内部类的作用范围仅限于本方法中
  • 局部内部类在访问他所在方法中的局部变量必须用final修饰
    • 因为当调用这个方法时,局部变量如果没有用final修饰,他的生命周期和方法的生命周期是一样的,当方法弹栈,这个局部变量也会消失,那么如果局部内部类对象还没有马上消失想用这个局部变量,就没有了,如果用final修饰会在类加载的时候进入常量池,即使方法弹栈,常量池的常量还在,也可以继续使用
    • jdk 1.8 取消的这个定义 , 其实不是取消了, 是设置为了隐式的

匿名内部类

定义

  • 匿名内部类就是内部类的简写形式,相当于是一个没有名字的子类
  • 匿名内部类用于定义接口的或者类的子类
  • 意义:
    • 方便对抽象类或接口的实例化
package com.qianfeng.inner;
public class Demo02 {
	public static void main(String[] args) {
		
		final String str = "公司核心代码";
		// 注意:创建匿名内部类对象的代码要放在匿名内部类代码之后
		
		// 局部内部类,书写的位置在方法内,作用域在方法内部
		class Computer{
			String brand;
			int price;
			
			public void surfInternet() {
				System.out.println("健康上网,幸福生活");
				System.out.println(str);//访问他所在方法中的局部变量必须用final修饰
			}
		}
		
		Computer computer = new Computer();
		computer.surfInternet();//访问他所在方法中的局部变量必须用final修饰
		
		
		
		ASUS asus = new ASUS();
		asus.power();
		// 匿名局部内部类
		new USB() {
			@Override
			public void power() {
				System.out.println("这台电脑的输出电压是5V");
			}
		}.power();
		
	}
}
interface USB{
	void power();
}
class ASUS implements USB{

	@Override
	public void power() {
		System.out.println("这台电脑的供电电压是20V");
	}
}

java中匿名内部类可以有构造方法吗

  • 否,匿名内部类不会有构造方法,因为它没有名字。
  • 构造方法的名字必须和类的名字一样。
  • 匿名内部类只是实例化它的抽象父类或者接口

权限修饰符

访问修饰符 同一个类 同包(不导包) 不同包,子类 不同包,非子类
private T
default(默认-default-package) T T
protected T T T
public T T T T

重写Tostring和重写equals

重写toString

  • 将对象以字符串的形式显示出来

重写equals

  • 方便比较对象的的值

equals和==(赋值运算符)的区别

  • 当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址

  • equals比较的是对象的值

  • 注:

    • 程序中使用赋值运算符进行对象赋值时,可以得到同一完全相同的对象。
发布了74 篇原创文章 · 获赞 28 · 访问量 5万+
展开阅读全文

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

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览