Java学习 day04


1 final
1.1 概述: final是一个关键字,最后的,最终的.被final修饰的内容是不能再被改变的
1.2 可以修饰的内容

1.3 空白final
1.3.1 概述:指被声明为final但又未给定初值的域,但是无论什么情况,编译器都确保空白final在使用前必须被初始化(例如:将变量的赋值推迟到构造函数进行)

1.3.2 优点
空白final在final的使用上提供了更大的灵活性,因为一个类中的final域可以做到根据对象而有所不同,却又保持其恒定不变的特性

2 abstract:抽象的
2.1 概述:制定规则,具体的由子类实现

2.2 抽象类的功能
(1)节省代码
(2)可以制定一批规则

2.3 注意点


2.4 【比较】普通类和抽象类

2.5 其它
(1)子类继承到的抽象方法实现时,要与父类中对应的抽象方法返回类型、参数列表相同

2.6 【代码】

public class Demo4 {
	public static void main(String[] args) {
		/*
		 * 用抽象类实现---练习
		 * 求圆和矩形的面积
		 */
		Circular xry1 = new Circular();
		System.out.println(xry1.getArea(2.0, 1.0));
		Rectangle xry2 = new Rectangle();
		System.out.println(xry2.getArea(4.0, 2.0));
	}
}
abstract class Area{
	abstract public double getArea(double a, double b);
}
class Circular extends Area{
	final static double PI = 3.14;
	public double getArea(double a, double b) {
		return PI*a*a;
	}
}
class Rectangle extends Area{
	public double getArea(double a, double b) {
		return a*b;
	}
}

3 interface:接口
3.1 概述:使Java间接实现了多继承(一般接口中不写成员变量,只写方法–只写规则,又将接口称为方法列表)

3.2 构成

3.3 其它
(1)接口可以与父类同时存在
(2)一个子类只能由一个父类,但可以有多个接口
(3)一般父类中放的时主要功能,接口中放的是额外的功能,接口作为父类的补充
(4)接口不可以直接创建对象
(5)接口与接口之间可以存在继承关系(包括多继承)
(6)如果某个类继承的多个接口里面的重名方法已经实现,则在该类中必须重写该方法。

3.4 【代码】

public class demo01 {
	public static void main(String args[]) {
		WeChat xry1 = new WeChat();
		System.out.println(xry1.Pay("xry", "OJ123456"));
		Alipay xry2 = new Alipay();
		System.out.println(xry2.Pay("xry", "OJ123456"));
	}
}
interface pay{
	public boolean Pay(String account, String money);
}
class WeChat implements pay{
	public boolean Pay(String account, String money) {
		System.out.println("WeChat Pay!");
		return true;
	}
}
class Alipay implements pay{
	public boolean Pay(String accoutn, String money) {
		System.out.println("Alipay Pay!");
		return true;
	}
}

4 设计模式
4.1 概述:前人总结出来的对一些常见问题的解决方案,后人直接拿来使用

4.2 常用的设计模式:单例、工厂、代理、适配器、装饰、模板、观察者等,一共有23种

4.3 单例
4.3.1 概述:一个类只允许有一个对象,建立一个全局的访问点,提供出去以供使用

4.3.2 分析:
(1)肯定要建立一个单例类来描述
(2)只允许有一个对象
(3)全局的访问点–通过static实现的
(4)提供出去以供使用

4.3.3 作用:
(1)传值
(2)作为全局的访问点(将一部分的功能从部分变成全局的(将功能全局化))

4.3.4 优点:
可以让两个对象在完全没有关系的前提下,实现值的传递,降低了耦合性,提高了内聚性

4.3.5 分类:
4.3.5.1 饿汉式

4.3.5.2 懒汉式

4.3.6 单例的内存

4.3.7 【样例】通过单例传值



4.3.8 Runtime类

5 多态
5.1 概述:一种事物的多种形态

5.2 多态存在的三个必要条件
(1)继承
(2)重写
(3)父类引用指向子类对象

Parent p = new Child();

5.3 【比较】继承、多态

5.4 其它
(1)父类的引用可以调用父类的方法,但是不能调用子类的方法
原因:编译阶段只能识别=号前面的引用类型,不会识别=号后面的对象

5.5 多态的优点、缺点
(1)优点:可以提高代码的扩展性,使用之前定义好的功能,后面直接拿来使用,不用再创建新的方法
(2)缺点:只能直接调用父类有的方法,不能直接调用子类特有的方法
(3)代码如下:

public class Demo9 {
	public static void main(String[] args) {
		//总结:优点:可以提高代码的扩展性,使用之前定义好的功能,后面直接拿来使用,不用再创建新的方法.实例在Demo9
		Dog dog = new Dog();
		Cat cat = new Cat();
		Pig1 pig = new Pig1();
		Animal animal = new Animal();
		feedAnimal(dog);
		feedAnimal(cat);
		feedAnimal(pig);
	}
	
	//喂狗,喂猫,喂动物
	public static void feedAnimal(Animal animal) {//animal = dog = new Dog()   多态
		animal.eat();
	}
}

class Animal{
	public void eat() {
		System.out.println("动物吃");
	}
}

class Dog extends Animal{
	@Override
	public void eat() {
		System.out.println("狗吃骨头");
	}
}

class Cat extends Animal{
	@Override
	public void eat() {
		System.out.println("猫吃");
	}
}

class Pig1 extends Animal{
	public void eat() {
		System.out.println("猪吃");
	}
}

5.6 向上转型、向下转型
5.6.1 概述

截图来源于菜鸟教程
总结:向下转型是经过向上转型之后又转回来

Animal a = new Cat();
Cat c = (Cat)a;

5.7 instanceof运算符
5.7.1 构成:对象 instanceof 类/子类

5.7.2 作用:判断当前的对象是否是后面的类或者子类的对象,是则返回true,不是则返回false

5.7.3 应用:进行容错处理,增加用户体验

5.7.4 【样例】

5.7.5 其它
(1)instanceof前后必须要有继承关系

5.8 多态下成员的使用
5.8.1 概述
继承中子类与父类出现同名的属性,父类的会被覆盖掉
多态中子类与父类出现同名的属性,编译与运行都看父类

5.8.2 【样例】

6 Object类
6.1 概述
Object是所有类的父类,任何类都默认继承Object。Object是类层次结构的根类。每个类都使用Object作为超类。所有对象(包括数组)都实现这个类的所有方法。

6.2 方法
6.2.1 equals():比较的是两个对象的地址

6.2.2 hashCode():获取的对象的哈希码值,在一个工程内,可以当做当前对象的身份证(唯一的标识)

6.2.3 toString():默认获取到的是包名+类名+@+哈希码值,当我们直接打印引用的时候,默认调用的时toString()方法

6.2.4 getClass():获取当前对象的字节码文件对象

6.2.5 clone():

7 Class类
7.1 概述
Class类的实例表示正在运行的Java应用程序中的类和接口。

7.2 使用
调用class属性得到对应的字节码文件(类名.class)

int.class
Child.class

8 内部类
8.1 概述:定义在一个类的内部的类,内部类的地位与外部类的成员变量、成员方法平等,内部类也可以看做是外部类的成员,成员之间可以相互调用

8.2 调用内部类成员的方式

8.3 功能
8.3.1 间接实现多继承

8.4 局部内部类
8.4.1 概述:定义在一个类方法中的类

8.4.2 作用范围:从定义开始到当前的方法结束

8.4.3 其它

8.5 静态内部类

8.6 匿名内部类
8.6.1 概述:除了 new Object()外所有的匿名都属于匿名内部类

8.6.2 创建匿名内部类对象注意点
(1)匿名内部类对象必须有父类或者父接口

8.6.3 匿名内部类对象的作用
(1)当只用到当前子类的一个实例对象的时候,定义好马上使用
(2)当不好起名字的时候
(3)可以更好的定义运行时的回调(知道即可)

8.6.4 匿名子类对象

8.6.5 匿名内部类基本形式

8.6.6 匿名对象、匿名内部类作为参数

8.6.7 匿名对象、匿名内部类作为返回值

8.7 内部类的作用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值