Java的类与类的继承

一、类,Java跟C和C++不同,类是基本的构成要素,所有对象都是由类创建的。

类的声明格式 :[修饰符]  class  [类名]  [extends  父类名]  [implements  接口名]

extends和implements项均为可选,表示是否继承或是否实现接口,修饰符可选值为(1)public:表明该类可悲其他类访问和引用,(2)abstract:表明该类只生命方法的存在而不去实现它,(3)final:该类不能被继承。

二、继承

首先是一个简单的类Fruit,有一个成员变量color和构造函数和一个成员函数im。

public class Fruit {
	String color;
	public Fruit()
	{
		color = "no color";
	}
	public void im()
	{
		System.out.println("I am fruit");
	}
}
然后一个类Apple继承Fruit

public class Apple extends Fruit{
	public Apple()
	{
		color = "red";
	}
	public void im()
	{
		System.out.println("I am an apple");
	}
	public void getColor()
	{
		System.out.println("red");
	}
	public static void main(String[] args) 
	{
		Apple apple = new Apple();
		apple.getColor();
		apple.im();
	}
	
}
运行后结果为

red

I am an apple

三、this关键字

用在类的成员函数里面,局部变量和成员变量的名字相同时,成员函数就会被隐藏,这时如果想用成员变量,则必须使用关键字this。

public class Fruit {
	String color;
	public Fruit()
	{
		color = "green";
	}
	public void im()
	{
		System.out.println("I am fruit");
	}
	public void harvest()
	{
		String color = "red";
		System.out.println("color in the member function:" + color);
		System.out.println("color in the class Fruit is:" + this.color);
	}
	public static void main(String[] args) 
	{
		Fruit fruit = new Fruit();
		fruit.harvest();
	}
}
运行结果是

color in the member function:red
color in the class Fruit is:green

四、super关键字

用在继承了父类的子类,想在子类中访问父类中被子类隐藏的成员方法或变量时,用super关键字调用父类的im函数和getColor

PS:super关键字不能再static的函数里面用。

public class Apple extends Fruit{
	public Apple()
	{
		color = "red";
	}
	public void im()
	{
		super.im();
	}
	public String getColor()
	{
		String str = super.getColor();
		return str;
	}
	public static void main(String[] args) 
	{
		Apple apple = new Apple();
		apple.im();
		System.out.print("The color is :" + apple.getColor());
	}
	
}

运行结果是

I am fruit
The color is :green

五、总结:

总体来说,Java的类感觉跟C++还是差不多的,我认为的主要区别有:

1、执行的函数main函数要写在类里面,并且要使用类的函数或是成员变量的时候需要实例化一个类,否则不能用。

2、Java用类实例化一个对象,需要用new,比如:Apple apple = new Apple(),而C++是Apple apple即可。

3、Java的类有修饰符,如public、abstract、final这些,而C++类是没有的,就像默认都是public的Java的类。

4、Java的类可以直接在成员变量上初始化,而C++则要是在构造函数中完成。不过我自己试了一下,C++中给类的成员变量直接赋值是可以的,只是会出现warning,然后说C++11中才支持这样的操作。


根据原作 https://pan.quark.cn/s/459657bcfd45 的源码改编 Classic-ML-Methods-Algo 引言 建立这个项目,是为了梳理和总结传统机器学习(Machine Learning)方法(methods)或者算法(algo),和各位同仁相互学习交流. 现在的深度学习本质上来自于传统的神经网络模型,很大程度上是传统机器学习的延续,同时也在不少时候需要结合传统方法来实现. 任何机器学习方法基本的流程结构都是通用的;使用的评价方法也基本通用;使用的一些数学知识也是通用的. 本文在梳理传统机器学习方法算法的同时也会顺便补充这些流程,数学上的知识以供参考. 机器学习 机器学习是人工智能(Artificial Intelligence)的一个分支,也是实现人工智能最重要的手段.区别于传统的基于规则(rule-based)的算法,机器学习可以从数据中获取知识,从而实现规定的任务[Ian Goodfellow and Yoshua Bengio and Aaron Courville的Deep Learning].这些知识可以分为四种: 总结(summarization) 预测(prediction) 估计(estimation) 假想验证(hypothesis testing) 机器学习主要关心的是预测[Varian在Big Data : New Tricks for Econometrics],预测的可以是连续性的输出变量,分,聚或者物品之间的有趣关联. 机器学习分 根据数据配置(setting,是否有标签,可以是连续的也可以是离散的)和任务目标,我们可以将机器学习方法分为四种: 无监督(unsupervised) 训练数据没有给定...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值