MOOC +《JAVA入门第二季》+ 第4章 多态

                  MOOC +《JAVA入门第二季》+ 第4章 多态

目录

                                                                   MOOC +《JAVA入门第二季》+ 第4章 多态

4-1 Java中的多态

1)引用多态

2)方法多态

4-2 多态中的引用类型转换

4-3 Java中的抽象类

1.语法定义

2.应用场景

3.作用

4.使用规则

4-5 Java中的接口

1.接口概念

2.接口定义

3.使用接口

4-7 UML简介

1.UML概念

2.UML图示

3.常用UML图

4.UML建模工具


4-1 Java中的多态

1)引用多态

父类的引用可以指向本类的对象;

父类的引用可以指向子类的对象;

2)方法多态

创建本类对象时,调用的方法为本类方法;

创建子类对象时,调用的方法为子类重写的方法或者继承的方法;

例子:

package com.imooc;
//Dog和Cat继承于Animal。Dog中重写了eat方法,Cat没有
public class Initial {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//父类引用可以指向本类对象
		Animal obj1 = new Animal();
		//父类引用可以指向子类对象
		Animal obj2 = new Dog();
		//Dog obj3 = new Animal(); //错误
		Animal obj3 = new Cat();
		
		//创建本类对象时,调用的方法是本类方法
		obj1.eat();
		//创建子类对象时,调用的方法是子类重写的方法或继承的方法
		obj2.eat();
		obj3.eat();
	}

}

4-2 多态中的引用类型转换

1)向上类型转换(隐式/自动类型转换),是小类型到大类型的转换

2)向下类型转换(强制类型转换),是大类型到小类型,有风险

3)instanceof运算符,来解决引用对象的类型,避免类型转换的安全性问题

例子:

package com.imooc;
//Dog和Cat继承于Animal。Dog中重写了eat方法,Cat没有
public class Initial {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Dog dog = new Dog();
		Animal animal = dog;  //向上类型转换,自动
		//Dog dog2 = (Dog)animal;  //向下类型转换,强制
		//Cat cat = (Cat)animal;  //编译时不报错,但运行时报错
		//可用instanceof运算符进行改进
		if(animal instanceof Dog) {
			Dog dog2 = (Dog)animal;  
		}else {
			System.out.println("无法类型转换为Dog");
		}
		if(animal instanceof Cat) {
			Cat cat = (Cat)animal; 
		}else {
			System.out.println("无法类型转换为Cat");
		}
		
	}

}

4-3 Java中的抽象类

1.语法定义

抽象类前使用abstract关键字修饰,则该类为抽象类。

2.应用场景

1)在某些情况下,某个父类只是知道其子类应该包含怎样的方法,但无法准确知道这些子类如何实现这些方法;

2)从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为子类的模板,从而避免了子类设计的随意性。

3.作用

限制规定子类必须实现某些方法,但不关注实现细节。

4.使用规则

1)abstract定义抽象类;

2)abstract定义抽象方法,只有声明,不需要实现;

3)包含抽象方法的类是抽象类;

4)抽象类中可以包含普通的方法,也可以没有抽象方法;

5)抽象类不能直接创建,可以定义引用变量。

例子:

package com.imooc;
//创建抽象类

public abstract class Telphone {
	public abstract void call();
	public abstract void message();
}
package com.imooc;
//子类Cellphone

public class Cellphone extends Telphone {

	@Override
	public void call() {
		// TODO Auto-generated method stub
		System.out.println("通过键盘打电话");

	}

	@Override
	public void message() {
		// TODO Auto-generated method stub
		System.out.println("通过键盘发消息");
	}

}

 

package com.imooc;
//子类Smartphone

public class Smartphone extends Telphone {

	@Override
	public void call() {
		// TODO Auto-generated method stub
		System.out.println("通过语音打电话");

	}

	@Override
	public void message() {
		// TODO Auto-generated method stub
		System.out.println("通过语音发消息");
	}

}
package com.imooc;
//Cellphone和Smartphone继承于抽象类Telphone

public class Initial {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Telphone tel1 = new Cellphone();
		tel1.call();
		tel1.message();
		
		Telphone tel2 = new Smartphone();
		tel2.call();
		tel2.message();
	}

}

输出结果:
通过键盘打电话
通过键盘发消息
通过语音打电话
通过语音发消息

4-5 Java中的接口

1.接口概念

类是一种具体实现体,而接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部数据,也不关心这些类里方法的实现细节,它只规定这些类里必须提供某些方法。

2.接口定义

和类定义不同,定义接口不再使用class关键字,而是使用interface关键字。

基本语法:

[修饰符] interface 接口名 [extends 父接口1,父接口2···]
 {
    零到多个常量定义···
    零到多个抽象方法的定义···
 }

 注:

1)修饰符:接口就是用来被继承、被实现的,修饰符一般建议用public,不能用private和protected修饰接口;

2)常量:接口中的属性是常量,即使定义时不添加public static final修饰符,系统也会自动加上;

3)方法:接口中的方法只能是抽象方法,即使定义时不添加public abstract修饰符,系统也会自动加上。

3.使用接口

一个类可以实现一个或多个接口,实现接口使用implements关键字。Java中一个类只能继承一个父类,是不够灵活的,通过实现多个接口可以做补充。

继承父类实现接口的语法为:

[修饰符] class 类名 extends 父类 implements 接口1,接口2···
{
    类体部分  //如果继承了抽象类,需要实现继承的抽象方法;要实现接口中的抽象方法。
}
//若要继承父类,继承父类必须在实现接口之前

例子:

package com.imooc;
//创建抽象类

public abstract class Telphone {
	public abstract void call();
	public abstract void message();
}
package com.imooc;
//创建接口IPlayGame
//给接口命名时,常在前面加上“I”,表示为接口

public interface IPlayGame {
	public void playGame();
}
package com.imooc;
//创建子类Smartphone,继承父类并实现接口IPlayGame
public class Smartphone extends Telphone implements IPlayGame{

	@Override
	public void call() {
		// TODO Auto-generated method stub
		System.out.println("通过语音打电话");

	}

	@Override
	public void message() {
		// TODO Auto-generated method stub
		System.out.println("通过语音发消息");
	}

	@Override
	public void playGame() {
		// TODO Auto-generated method stub
		System.out.println("具有了玩游戏的功能");	
	}

}
package com.imooc;
//创建另一个子类Psp,实现接口IPlayGame
public class Psp implements IPlayGame {

	@Override
	public void playGame() {
		// TODO Auto-generated method stub
		System.out.println("具有了玩游戏的功能");	
	}

}
package com.imooc;
//主程序

public class Initial {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		IPlayGame ip1 = new Smartphone();
		IPlayGame ip2 = new Psp();
		ip1.playGame();
		ip2.playGame();
	}

}

4-7 UML简介

1.UML概念

Unified Modeling Language(UML)又称统一建模语言或标准建模语言。

是一个支持模型化和软件系统开发的图形化语言。

2.UML图示

UML2.2中一共定义了14种图示(diagrams)。

3.常用UML图

1)用例图(The Use Case Diagram)

用例图能够以可视化的方式,表达系统如何满足所收集的业务规则,以及特定的用户需求等信息。

2)序列图(The Sequence Diagram)

序列图用于按照交互发生的一系列顺序,显示对象之间的这些交互。

3)类图(The Class Diagram)

UML类图、业务逻辑和所有支持结构一同被用于定义全部的代码结构。

4.UML建模工具

使用PowerDesigner设计实例:

PS:可以自动生成Java框架代码。

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值