java面向对象20抽象类abstract的使用

Java SE-04面向对象高级-抽象类、接口 本文介绍了Java中几个重要的概念和设计模式: final关键字:可以修饰类、方法和变量。修饰类表示不可继承,修饰方法表示不可重写,修饰变量表示只能赋值一次。特别介绍了使用static final定义常量的用法和优势。 单例设计模式:确保类只能创建一个对象,分为饿汉式(提前创建对象)和懒汉式(延迟创建对象)两种实现方式。 枚举类:一种特殊类,适合做信息分类和标志,具有构造器私有、不可继承等特点。 抽象类:包含抽象方法的类,不能实例化,主要用于作为父类让子类继承并实现抽象方法。介绍了模板方法设计模式的应用。 阅读详情

/*

  • 抽象类与抽象方法,abstract关键字
  • abstract可以修饰类与方法,不能t修饰变量、代码块、构造器,
  • 不能用abstract修饰私有方法、静态方法、final的方法、final的类。
  • 1,用abstract关键字来修饰一个类,这个类叫做抽象类.
  • 1.1抽象类不能被实例化
  • 1.2类中一定要有构造器,便于子类实例化时调用。
  • 1.3应用中都会提供抽象类的子类,让子类对象实例化。
  • 2,用abstract来修饰一个方法,该方法叫做抽象方法。
  • 2.1抽象方法只有声明,没有方法体,没有{},
  • 2.2包含抽象方法的类一定是抽象类,否则类就会有实例,可能调取抽象方法。抽象类中不一定有抽象方法。
  • 2.3抽象类的子类必须重写父类的抽象方法,并提供方法体。
  • 若没有重写全部的抽象方法,仍为抽象类
  • 3,抽象类在调用的时候可以使用匿名类的方式,在 只调用一次的情况下可以通过
  • new 抽象类名(){}.方法名();的方式创建抽象类的匿名类,{}内部写入重写 的抽象方法。
  • 4,模板方法设计模式
  • 4.1抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模板
  • ,子类在抽象类的基础上进行扩展、改造,但子类总体上会保留抽象类的行为方式
  • 4.2当功能内部一部分实现是确定的,一部分实现是不确定的。这时可以把不确定的部分暴露出去,让子类去实现。
  • 4.3换句话说,在软件开发中实现一个算法时,整体步骤很固定、通用,这些步骤已经在父类中写好了。但是某些部分易变,易变部分可以抽象出来,供不同子类实现。这就是一种模板模式。
  • 4.4模板方法设计模式是编程中经常用得到的模式。各个框架、类库中都有他的
  • 影子,比如常见的有:
    * 数据库访问的封装
    * Junit单元测试
    * JavaWeb的Servlet中关于doGet/doPost方法调用
    * Hibernate中模板程序
    * Spring中JDBCTemlate、HibernateTemplate等

*/

package object_chapter2;

import java.util.Calendar;
import java.util.Scanner;

public class Object_Abstract {
  public static void main(String[] args) {
	//非匿名类非匿名对象调用方式
	Dog d = new Dog();
	d.shout();
	//非匿名类匿名对象调用方式
	new Dog().eat();  
	//匿名类非匿名对象调用方式
	Animal a = new Animal() {

		@Override
		void eat() {
			// TODO Auto-generated method stub
			System.out.println("bird eat bugs");
		}

		@Override
		void shout() {
			// TODO Auto-generated method stub
			System.out.println("渣渣!!");
		}
		
	};
	a.eat();
	a.shout();
	//匿名类匿名对象的调用
	new Animal() {

		@Override
		void eat() {
			// TODO Auto-generated method stub
			
		}

		@Override
		void shout() {
			// TODO Auto-generated method stub
			System.out.println("嘶嘶嘶!!!");
		}
		
	}.shout();
	  //测试模板设计模式
	 Timer t = new FindPrime();
	  t.spendTime();
	
	  //测试练习
	  //获取当前月份方式1
//	  Scanner scan = new Scanner(System.in);
//	  System.out.println("请输入当前月份");
//	  int month = scan.nextInt();
	//获取当前月份方式2
	  Calendar c = Calendar.getInstance();//Calendar是JDK中 提供的关于日期的抽象类
	  int month = c.get(c.MONTH) + 1; //月份数值从0到11,转换到正常数值需要加1.
	  System.out.println("当前月份是:" + month + "月");
	  Employee[] employeeList = new Employee[4];
	  employeeList[0] = new HourlyEmployee(1001, "join", new BirthDate(2000, 10, 1), 50, 256);
	  employeeList[1] = new SalariedEmployee(1002, "jake", new BirthDate(1995, 1, 11), 14000);
	  employeeList[2] = new HourlyEmployee(1003, "pork", new BirthDate(2002, 2, 1), 55, 244);
	  employeeList[3] = new SalariedEmployee(1004, "tony", new BirthDate(1990, 2, 11), 19000);
	  for (int i = 0; i < employeeList.length; i++) {
		 System.out.println(employeeList[i].toString());
		 if(month == employeeList[i].getBirthday().getMonth()){
			 System.out.println("生日福利加1000元");
		 System.out.println("当月工资是: " + (employeeList[i].earning() + 1000));
		 }else {
	     System.out.println("当月工资是: " + employeeList[i].earning()); 
		 }
	}
}
  
}

abstract class Animal{
	private String name;
	private int age;
	abstract void eat();
	abstract void shout();
}

class Dog extends Animal{

	@Override
	void eat() {
		// TODO Auto-generated method stub
		System.out.println("dog eat bones");
	}

	@Override
	void shout() {
		// TODO Auto-generated method stub
		System.out.println("汪汪汪!!!");
	}
	
}

class Cat extends Animal{

	@Override
	void eat() {
		// TODO Auto-generated method stub
		System.out.println("cat eat fish");
	}

	@Override
	void shout() {
		// TODO Auto-generated method stub
		System.out.println("喵喵喵!!!");
	}
	
}

abstract class Timer{
	
	void spendTime() {
		long start = System.currentTimeMillis();
		code();
		long end = System.currentTimeMillis();	
		System.out.println("Programe spend time:" + (end - start));
	}
	
	abstract void code();
	
}

class FindPrime extends Timer{

	@Override
	void code() {
		for (int i = 2; i <= 1000; i++) {
			boolean mark = true;
			for (int j = 2; j < Math.sqrt(i); j++) {
				if(i % j == 0) {
					mark = false;
					break;
				}				
			}
			if(mark) {
			System.out.println(i);
			}
		}		
	}	
}

abstract class Employee{
	private int ID;
	private String name;
	private BirthDate birthday;
	abstract double earning();
	public Employee() {
		super();
	}
	public Employee(int iD, String name, BirthDate birthday) {
		super();
		ID = iD;
		this.name = name;
		this.birthday = birthday;
	}
	
	public int getID() {
		return ID;
	}
	public void setID(int iD) {
		ID = iD;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public BirthDate getBirthday() {
		return birthday;
	}
	public void setBirthday(BirthDate birthday) {
		this.birthday = birthday;
	}
	@Override
	public String toString() {
		return "Employee [ID=" + ID + ", name=" + name + ", birthday=" + this.birthday.toDateString() + "]";
	}
	
		
}

class BirthDate{
	private int day;
	private int month;
	private int year;
	public BirthDate() {
		super();
	}
	public BirthDate(int year, int month, int day) {
		super();
		this.day = day;
		this.month = month;
		this.year = year;
	}	
	
	public int getDay() {
		return day;
	}
	public void setDay(int day) {
		this.day = day;
	}
	public int getMonth() {
		return month;
	}
	public void setMonth(int month) {
		this.month = month;
	}
	public int getYear() {
		return year;
	}
	public void setYear(int year) {
		this.year = year;
	}
	String toDateString() {
		return year + "年" + month + "月" + day + "日";
	}	
}

class SalariedEmployee extends Employee{
    private double monthlySalary;
    
	

	public SalariedEmployee() {
		super();
	}

	public SalariedEmployee(int iD, String name, BirthDate birthday,double monthlySalary) {
		super(iD, name, birthday);
		this.monthlySalary = monthlySalary;
	}

	public double getMonthlySalary() {
		return monthlySalary;
	}
	
	public void setMonthlySalary(double monthlySalary) {
		this.monthlySalary = monthlySalary;
	}
	@Override
	double earning() {
		// TODO Auto-generated method stub
		return monthlySalary;
	}

	@Override
	public String toString() {
		return "SalariedEmployee [ " + super.toString() + ", monthlySalary=" + monthlySalary + "]";
	}
	
	
}
class HourlyEmployee extends Employee{
	private double hourlySalary;
	private int hour;
	public HourlyEmployee() {
		super();
	}

	public HourlyEmployee(int iD, String name, BirthDate birthday,double hourlySalary,int hour) {
		super(iD, name, birthday);
		this.hourlySalary = hourlySalary;
		this.hour = hour;
	}
	
	public double getHourlySalary() {
		return hourlySalary;
	}

	public void setHourlySalary(double hourlySalary) {
		this.hourlySalary = hourlySalary;
	}

	@Override
	double earning() {
		// TODO Auto-generated method stub
		return hour * hourlySalary;
	}

	@Override
	public String toString() {
		return "HourlyEmployee [ " + super.toString() + ", hourlySalary=" + hourlySalary + ", hour=" + hour + "]";
	}
		
}
C/C++小宇宙代码(完整代码) C语言实现小宇宙的完整代码。 阅读详情

相关推荐

MindIE与vLLM-Ascend性能对决:Qwen3在昇腾910B上的推理效率实测

本文深度对比了昇腾910B平台上两大推理框架MindIE与vLLM-Ascend的性能表现。通过实测Qwen3系列模型,详细分析了二者在单卡、多卡场景下的推理效率、扩展性及生产环境适用性,为AI算力基础设施选型提供关键参考。

weixin_29214335的博客 1176

Java中的abstract方法和abstract类的问题

1,abstract修饰类,会使这个类成为一个抽象类,这个类将不能生成对象实例,但可以做为对象变量声明的类型,也就是编译时类型,抽象类就像当于一类的半成品,需要子类继承并覆盖其中的抽象方法。 2,abstract修饰方法,会使这个方法变成抽象方法,也就是只有声明(定义)而没有实现,实现部分以";"代替。需要子类继承实现(覆盖)。 注意:有抽象方法的类一定是抽象类。但是抽象类中不一定都是

南北雪树的专栏 1938

SAP系统中PP模块全配置文档

配置路径IMG>SAP NetWeaver>常规设置>维护日历>工厂日历事务代码SCAL要求传输工厂代码描述日历代码日历描述起始日期星期一星期二星期三星期四星期五星期六星期日有效开始日期有效结束日期1000南微医学工厂MT南微医学工厂日历√√√√√√√201820502.4定义工厂配置路径IMG>生产>物料清单>常规数据>定义BOM状态事务代码OS23要求传输配置路径IMG>生产>主数据>资源>常规数据>标准值>定义参数。

yanzibing99的博客 1889

构造函数为何不能用abstract, static, final修饰

不同于方法,构造器不能是abstract, static, final的.1.构造器不是通过继承得到的,所以没有必要把它声明为final的。2.同理,一个抽象的构造器将永远不会被实现,所以它也不能声明为abstract的。3.构造器总是关联一个对象而被调用,所以把它声明为static是没有意义的。摘自:Unlike methods, a constructor cannot be abstract, static, final, native or synchronized. 1. A constructo

suoweiliangfeng6的专栏 3135

保姆级教程:用中移ML307模组对接高德/OneOS定位服务,从配置apikey到解析+MLBSLOC状态码

本文详细介绍了如何使用中移ML307系列模组对接高德/OneOS定位服务,从配置apikey到解析+MLBSLOC状态码的全过程。涵盖高德定位服务和OneOS定位服务的配置步骤、常见错误处理及性能优化技巧,帮助开发者快速实现基站定位功能,提升物联网项目的定位精度和稳定性。

weixin_30632089的博客 504

文石NoteX3国行版安装 Google Play经验分享

文石NoteX3国行版安装 Google Play经验分享。

2301_80693261的博客 7589

框架设计之抽象类的作用

框架设计之抽象类

yz18931904的博客 522

DTW Barycenter Averaging(DBA)——平均序列求法

DBA该算法是用来求序列数据集SS的一致序列(平均序列)。由Franc-ois Petitjean提出的。目前,该方法求得的平均序列是最准确的。 假设一元组为S={s1,s2,⋯,sn}S={s1,s2,\cdots,sn},当SS中的元素为实数时,很容易求的SS的平均值: avg=s1+s2+⋯+snn(1) avg = \dfrac{s1 +s2+\cdots+sn}{n} \qquad\q

光怪陆离 1万+

Java关键字(四):abstract

关键字大全(二)一、“abstract” 关键字的使用1. 理解2. 作用3. 修饰类:抽象类4. 修饰方法:抽象方法5. 经典题目6. 应用:模板方法设计模式(TemplateMethod)7. 抽象类的匿名子类 一、“abstract” 关键字的使用 1. 理解 abstract:抽象的 2. 作用 (1)abstract可以用来修饰类、方法。 (2)不能用abstract修饰变量、代码块、构造器。 (3)不能用abstract修饰私有方法、静态方法、final的方法、final的类。 3. 修

weixin_52533007的博客 1916

在windows安装程序时出现 系统无法打开指定的设备或文件的解决方案

本文主要介绍了在windows安装程序时出现 系统无法打开指定的设备或文件的解决方案,希望能对使用windows的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 1万+

小论文/大论文必备 | RT-DETR目标检测、数据集增强 | 引入多种数据集增强方法,支持图像和标签同步扩充增强,助力小论文和大论文实验涨点策略,平均提升模型mAP约1-2个百分点

RT-DETR目标检测数据增强策略研究 ,本文针对RT-DETR目标检测模型提出9种数据增强方法,包括几何变换(水平/垂直翻转、中心裁剪)、光照调整(亮度、对比度)和噪声添加(高斯/椒盐噪声)等。所有增强操作均保持图像与标签同步变换,确保训练数据的准确性。实验表明,该策略可提升模型mAP 1-2个百分点,对小目标检测效果尤为显著。文中提供了完整的Python实现代码,支持批量处理图像和标签文件,并详细说明了各增强方法的功能特点。该方法通过提升数据多样性,有效增强了模型在复杂场景下的鲁棒性和泛化能力。

Ai缝合怪、助力小伙伴高效发论文 460

关于抽象类的部分理解

抽象类: 某个父类知道其所有子类要完成某功能,但是每个子类完成情况都不一样,父类就只定义该功能的基本要求,具体实现由子类完成,这个类就可以是一个抽象类,抽象类其实就是一种不完全的设计图。 抽象类必须使用abstract修饰:修饰符 abstract class 类名{ } 抽象方法: 就是抽象类中定义的子类必须完成的功能的基本要求。 格式:修饰符 abstract 返回值类型 方法名称(形参列表); 没有方法体,只有方法签名,必须abstract修饰。 抽象的使用总结和注意事项: 抽象类是

m0_47320958的博客 351

【数字IC验证快速入门】26、SystemVerilog项目实践之AHB-SRAMC(6)(AHB-SRAMC SVTB Overview)

导读:作者有幸在中国电子信息领域的排头兵院校“电子科技大学”攻读研究生期间,接触到前沿的数字IC验证知识,旁听到诸如华为海思、清华紫光、联发科技等业界顶尖集成电路相关企业面授课程,对数字IC验证有了一些知识积累和学习心得。为帮助想入门前端IC验证的朋友,思忱一二后,特开此专栏,以期花最短的时间,走最少的弯路,学最多的IC验证技术知识。 文章目录一、内容概述二、AHB-SRAMC 验证计划 一、内容概述 AHB-SRAMC 验证计划 AHB-SRAMC 验证平台的架构图 AHB-SRAMC 验证平台的代.

悟已往之不谏 知来者之可追 2650

java面向对象20_抽象类(abstract)

1.抽象类概述 当编写一个类时,我们往往会为该类定义一些方法,这些方法是用来描述该类的功能具体实现方式,那么这些方法都有具体的方法体。 但是有的时候,某个父类只是知道子类应该包含怎么样的方法,但是无法准确知道子类如何实现这些方法。比如一个图形类应该有一个求周长的方法,但是不同的图形求周长的算法不一样。那该怎么办呢? 分析事物时,发现了共性内容,就出现向上抽取。会有这样一种特殊情况,就是方法功能声明...

安德的博客 440

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

关于类和面向对象的学习

用absract修饰的类叫抽象类,用abstract修饰的方法叫做抽象方法。如果一个类中有抽象方法,那么这个类必须是抽象类。抽象类不能被实例化,只能用来被继承。(如前面的Animal)抽象方法没有方法体,只有方法的声明。抽象类的子体必须重写其继承的抽象方法。eg.前文的Animal父类可以被改成抽象类。

LiaoLuoAnaxa的博客 390

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Java 抽象类(Abstract)

什么是抽象类 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的 ,如果一个类当中没有包含足够的信息来描绘一个具体的对象,那么这样的类被称为抽象类。 也可以这样理解,,我们都知道,一个具体类用变量和方法来描述对象,那么就是说,抽象类则是没有足够的信息(没有足够的方法或者变量)来描述对象。 定义语法格式: 在Java当中,抽象类的语法格式如下: class<class_name> { <method_name>(parameter-iist

shuyv的博客 802

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

java中的抽象类

包含抽象方法的类我们称为。

weixin_74149684的博客 1201

Java抽象类详细介绍

1 概述 父类中的方法,被他的子类们重写,子类各自的实现都不尽相同。那么父类的方法声明和方法主体,只有声明还有 意义,而方法主体则没有存在的意义了。我们把没有方法主体的方法称为抽象方法。Java语法规定,包含抽象方法 的类就是抽象类。 总的来说就是: 抽象方法:没有方法体的方法 抽象类:包含抽象方法的类 2 abstract的使用格式 2.1抽象方法 使用abstrct关键字修饰的方法就是抽象方法,值得注意的是,抽象方法只包含一个方法名,没有方法体。 定义格式为: 修饰符 abstra

weixin_43761593的博客 2万+

java--抽象类(abstract)和接口(interface)

int n;//普通属性//静态属性public Abstract(int n) {//构造方法this.n = n;int a=10;interface 接口名{}定义一个接口AA,

ybq19513345431的博客 2388

Abstract Class抽象类

本文内容是抽象类的介绍

qq_68874993的博客 798

java之抽象类与接口

带你轻松了解抽象类与接口

G13138200303的博客 2001

Java——抽象类(abstract)(概念理解+应用举例)

Java——抽象类(abstract)(概念理解+应用举例)

贝尔摩德苦艾酒 1万+

Java面向对象进阶:static、代码块、final与抽象类的使用场景与避坑

本文主要介绍了Java中final关键字、常量、单例模式、枚举类、抽象类和接口等核心概念。final可修饰类(不可继承)、方法(不可重写)和变量(不可修改);常量使用static final修饰,用于系统配置;单例模式确保类只有一个实例;枚举类适合信息分类;抽象类通过抽象方法实现多态,支持模板方法设计模式;接口弥补单继承不足,支持多实现,JDK8新增了默认、私有和静态方法。抽象类和接口都能实现多态和解耦,但抽象类更侧重代码复用,接口更强调功能解耦。这些特性为Java提供了灵活的对象设计和系统架构能力。

xwhxy的博客 1510

资深互联网大佬的5000字吐血总结——Java面向对象三大修饰符之abstract、static、final

目录一、abstract(抽象的)1. abstract可以用于修饰类2. abstract可以用于修饰方法3. 抽象类的子类4. 抽象类强制使用多态。5. 抽象类的应用场景:【理解】二、static (静态的)1. static可以修饰属性 一、abstract(抽象的) 1. abstract可以用于修饰类 (1) 被abstract修饰的类称为抽象类。 abstract class 类名{}...

码小白. 3302

Java修饰符,抽象类

final修饰符 final主要用法有以下四种: 一、用来修饰数据,包括成员变量和局部变量,该变量只能被赋值一次且它的值无法被改变。对于成员变量来讲,我们必须在声明时、构造方法或者初始化块中对它赋值; 1. public class FinalMemberVariables { 2. // final 修饰的实例变量 3. // 必须在非静态初始化块、声明该实例变量或构造器中指定初...

weixin_42530700的博客 2056

Java抽象类和接口

本文主要介绍了Java中抽象类和接口的定义、特点及使用场景对比。抽象类用abstract声明,可包含抽象方法和具体方法,不能直接实例化,需通过子类继承实现;接口通过interface定义,默认方法为public abstract,强调行为规范。二者在语法结构、设计目的和多继承方面存在差异:抽象类可包含构造方法和成员变量,接口仅能包含常量;抽象类强调"是什么",接口强调"能做什么";类只能继承一个抽象类,但可实现多个接口。此外还涉及内部类、Comparable接口、深拷

lkzsc的博客 263
上一篇: java面向对象19 final关键字的使用
下一篇: java面向对象21接口interface的使用
wisdomcodeinside
博客等级 码龄7年 29粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值