第四章 面向对象程序设计(下)

版本:JDK1.8
注:观看尚硅谷视频的复习笔记

十五、包装类

继承自Number类

1、基本数据类型转换为包装类

int num = 10;
Integer integer = new Integer(num);

2、包装类转换为基本数据类型

integer.intValue();
float.floatValue();

3、自动装箱与拆箱

boolean b1 = true;//自动装箱不需要构造器
Boolean b2 = b1;//自动装箱

boolean b3 = b2;//自动拆箱

int i = 10;
method(i);//自动装箱

public void method(Object obj) {
}

4、基本数据类型、包装类转换为String类型

String.valueOf(数据类型);

		int num1 = 10;
		//方式1:连接运算
		String str1 = num1 + "";
		//方式2:调用String的valueOf(Xxx xxx)
		float f1 = 12.3f;
		String str2 = String.valueOf(f1);//"12.3"
		
		Double d1 = new Double(12.4);
		String str3 = String.valueOf(d1);

5、String转换为基本数据类型、包装类

parseXxx(String);

String str1 = "123"; //不标准就会报异常
int num2 = Integer.parseInt(str1);

String str2 = "true";  //不是true就是false
boolean b1 = Boolean.parseBoolean(str2);

十六、static

某些特定的数据在内存空间只有一份

1、修饰属性、方法、代码块、内部类

(一)、修饰属性

静态变量(静态属性、类变量)

1、创建了类的多个对象,多个对象共享同一个静态变量,当修改静态变量时,会导致其他对象调用此静态变量时,是修改过了的。

2、静态变量随着类的加载而加载的

3、静态变量的加载早于实例变量

4、可以通过 类.静态变量 的方式进行调用

5、由于类只会加载一次,所以静态变量只存在一份,存在方法区的静态域中

(二)、修饰方法

静态方法

1、随着类的加载而加载

2、可以通过 类.方法名 的方式调用

3、静态方法中,只能调用静态的方法和属性

4、非静态方法中,既可以调用非静态方法,也可以调用静态方法。

5、在静态方法内不允许使用this和super

(三)、方法区

类的加载信息、静态域、常量池。

十七、代码块

1、在类中任意位置定义

2、作用:初始化类或对象

3、只能用static修饰

4、静态代码块

随着类的加载而执行

初始化类的信息

5、非静态代码块

随着对象的加载而执行

可以在创建对象时,对对象的属性进行初始化

十八、final

可以用来修饰:类、方法、变量

1、修饰类:不可以被继承。例如:String、System、StringBuffer

2、修饰方法:不可以被重写。例如Object类中getClass()

3、修饰变量:变为常量,不可以改变。

​ 显式初始化、代码块中初始化、构造方法初始化。

4、修饰形参时:此形参变为常量,一旦调用以后,在此方法体内只能使用,不能改变。

5、static final :全局常量

十九、抽象类与抽象方法

1、关键字:abstract

(一)、修饰类

1、此类不能实例化

2、抽象类中也有构造器,便于子类实例化时调用。

(二)、修饰方法

1、只有方法的声明,没有方法体

public abstract void eat();

2、抽象方法只能存在抽象类中,反之抽象类中可以没有抽象方法。

3、不能修饰私有方法、静态方法、final的类和方法。

(三)、子类继承抽象类

1、子类必须重写父类所有的抽象方法。

2、若子类也是抽象类,则可以不用重写父类所有抽象方法。

(四)、抽象类的匿名子类
abstract class Person{
    abstract void a() {
    }
}
//创建匿名子类的对象
Person person = new Person() {
	@Override
    abstract void a() {  
    }
};
//创建匿名子类的匿名对象
new Person() {
    @Override
    abstract void a() {  
    }
};

二十、接口

1、关键字:interface

2、接口中都是public的

3、接口和类是并列的结构

4、接口中不允许定义构造器,意味着接口不能实例化。

5、接口通过让类实现(implements)的方式来使用。

(1)、子类要实现接口中所有抽象方法才可以实例化。

(2)、如果实现类没有实现接口中的所有抽象方法,则此类为一个抽象类。

6、JDK7:只能定义全局常量和抽象方法

(1)、全局常量:接口默认是public static final的,可以省略不写。

(2)、抽象方法:接口默认是public abstract的,可以省略不写。

7、JDK8:还可以定义静态方法和默认方法

8、接口的具体使用:体现多态性

9、接口实际上可以看做是一种规范

(一)、多实现
class A extendsB implements C,D{ 
}
(二)、多继承
interface A{}
interface B{}
interface C extends A,B{}
(三)、匿名实现类
//1.创建了接口的非匿名实现类的非匿名对象
		Flash flash = new Flash();
		com.transferData(flash);
		
		//2. 创建了接口的非匿名实现类的匿名对象
		com.transferData(new Printer());
		
		//3. 创建了接口的匿名实现类的非匿名对象
		USB phone = new USB(){

			@Override
			public void start() {
				System.out.println("手机开始工作");
			}

			@Override
			public void stop() {
				System.out.println("手机结束工作");
			}
			
		};
		com.transferData(phone);
		
		
		//4. 创建了接口的匿名实现类的匿名对象
		
		com.transferData(new USB(){
			@Override
			public void start() {
				System.out.println("mp3开始工作");
			}

			@Override
			public void stop() {
				System.out.println("mp3结束工作");
			}
		});
(四)、接口JDK8新特性

可以定义静态方法和默认方法

public interface CompareA {
	
	//静态方法
	public static void method1(){
		System.out.println("CompareA:北京");
	}
	//默认方法
	public default void method2(){
		System.out.println("CompareA:上海");
	}
	
	default void method3(){
		System.out.println("CompareA:上海");
	}
}

1、接口中定义的静态方法,只能通过此接口来调用。

2、接口中定义的默认方法,可以通过实现类的对象调用。

3、接口中定义的默认方法,可以通过实现类重写。

4、如果子类(实现类)继承的父类和实现的接口中有同名同参数方法,在子类没有重写此方法的情况请,默认调用父类的同名同参数的方法。

5、如果实现类实现了多个接口,这多个接口中定义了同名同参数的默认方法,那么在实现类没有重写此方法的情况下,报错(接口冲突),必须在实现类中重写此方法。

6、当父类与实现的接口中有同名方法,且此方法被子类重写

method();//调用自己重写方法
super.method();//调用父类方法
Compare.super.method();//调用接口中同名方法

二十一、内部类

(一)、成员内部类

定义在类内

1、作为外部类的成员

可以被四种权限修饰符修饰。

2、单独看做一个类:类内可以定义属性、方法、构造器等。

(1)、可以用final修饰,表示此类不能被继承。

(2)、可以用abstract修饰,表示此类不能被实例化。

3、静态

不可以调用外部类属性、方法

4、非静态

调用外部类属性、方法

外部类名.this.方法

5、实例化成员内部类对象

(1)、静态

外部类.内部类 对象名 = new 外部类.内部类构造器

(2)、非静态

外部类.内部类 对象名 = 外部类对象.new 内部类构造器
(二)、局部内部类

方法内、代码块内、构造器内

在局部内部类的方法中,如果调用局部内部类 所声明的方法中 的局部变量,则要求此局部变量声明为final(JDK8可以省略不写)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值