欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

荐 Java自学笔记3

程序员文章站 2022-05-21 12:18:30
第十一章 继承一、extends 继承在Java语言中,用 extends 来表示两个类的父子关系public class B extends A{……}表示B继承于A(B继承了A)A: 父类 ( superclass )B :子类 ( subclass )下面以文件(MyFile)与视频文件(MyVideoFile)为例来展现继承的用法父类MyFilepackage my;public class MyFile{public long size; // 文件大小pub...

第十一章 继承

一、extends 继承

在Java语言中,用 extends 来表示两个类的父子关系
public class B extends A
{……}

表示B继承于A(B继承了A)
A: 父类 ( superclass )
B :子类 ( subclass )
下面以文件(MyFile)与视频文件(MyVideoFile)为例来展现继承的用法
父类MyFile

package my;

public class MyFile
{
	public long size; // 文件大小
	public String name; // 文件名
	
	// 显示文件信息
	public void info()
	{
		System.out.println("文件: " + name + ", 大小: " + size);
	}
}

子类(MyVideoFile)

package my;

public class MyVideoFile extends MyFile
{
	// 父类的public成员自动继承
	
	// 添加子类的特性
	public int duration ; // 时长
	
	public void play()
	{
		System.out.println("播放视频"+ this.name);
	}
	
	public void stop()
	{
		System.out.println("停止播放"+ this.name);
	}
}

创建对象并是使用方法

package my;

public class HelloWorld
{

	public static void main(String[] args)
	{

		MyVideoFile f = new MyVideoFile();
		
		f.size = 1293034;  // 从父类MyFile里继承而来的属性
		f.name = "abc.mp4";
		f.duration = 130; // 来自子类
		
		f.info(); // 来自父类
		f.play();
		f.stop();
		
	}
}

父类中的继承来的大部分东西,子类里可以直接使用

继承是一个重要的语法,经常使用,务必掌握!

二、重写

重写 (override) :如果父类的方法不满足要求,则可以在子类里重写一遍。

1、重写时子类可以选择:

(1)完全重写

public class MyVideoFile extends MyFile
{
	// 父类的public成员自动继承
	// 添加子类的特性
	public int duration; // 时长
	public void play()
	{
		System.out.println("播放视频" + this.name);
	}
	public void stop()
	{
		System.out.println("停止播放" + this.name);
	}
	@Override
	public void info()
	{
		System.out.println("文件名: " + this.name
				+ ",大小: " + size
				+ ",时长: " + duration
				);
	}
}

(2)在父类的基础上补充

public class MyVideoFile extends MyFile
{
	// 父类的public成员自动继承
	// 添加子类的特性
	public int duration; // 时长
	public void play()
	{
		System.out.println("播放视频" + this.name);
	}
	public void stop()
	{
		System.out.println("停止播放" + this.name);
	}
	@Override
	public void info()
	{
		super.info();
		System.out.println(",时长: " + duration);
	}

注意:一般情况下可以直接在Eclipse自动添加,不需要手写(重点,能够缩小新手朋友写代码的难度)

这里我们以重写info来当做例子
具体操作如下:
① 先在子类里面右键->Scource->Override…
荐
                                                        Java自学笔记3
②在框内选定想要重写的方法(此处为info())
荐
                                                        Java自学笔记3
③在所给框架内完全重写或是在父类的基础上进行重写
荐
                                                        Java自学笔记3
注:@Override这一行也是有用的,不要删掉

三、构造方法的应用

1、父类的构造方法

我们要知道的是,重写对应的对象是类里面的普通的方法
(1) 而构造方法不能叫重写。事实上我们只需要知道:在创建子类对象时,父类的构造方法会被自动调用。
/////////////////////////////// Parent类 ////////////////////////

package my;

public class Parent
{
	public Parent()
	{
		System.out.println("调用了Parent类的构造方法");
	}
}

///////////////////////////////Child类 ////////////////////////

package my;

public class Child extends Parent
{
	public Child()
	{
		System.out.println("调用了Child类的构造方法");
	}
	
	
}

创造一个对应的对象

package my;

public class HelloWorld
{

	public static void main(String[] args)
	{
		Child child=new Child();
		System.out.println("exit");
	}

}

结果
荐
                                                        Java自学笔记3
**(2)**如果父类有多个构造方法,可以在子类里显示指定用哪个构造方法。
例如:
//////////////////////////// 父类 ///////////////////

package my;

public class Parent
{
	private int a;
	
	public Parent()
	{
		System.out.println("父类的构造...");
	}

	public Parent( int a)
	{
		this.a =a;
	}
}

/////////////////////////// 子类 //////////////////////

package my;

public class Child extends Parent
{
	public Child()
	{
		super ( 123 );
		System.out.println("子类的构造...");		
	}
	
}

四、单根继承

Java语言里,一个类只能extends 一个父类(这个地方与c++不同,在c++中可以进行多继承)

1、继承链

如果A继承于B, B继承于 C, C继承于D,表示为:
A -> B -> C -> D
则当于 B是父亲,C是祖父,D是曾祖父
在eclipse中我们可以通过:鼠标右键-> Quick Type Hierarchy或是ctrl+t来查看继承链

2.Object类

在Java语言里,Object类是所有类的父类
如果一个类没有指定父类,则它默认父类就是Object

例如:
荐
                                                        Java自学笔记3
查看继承链的结果
荐
                                                        Java自学笔记3

3、重写 toString()方法

toString()是Object的一个方法,重写这个方法,可以在调试的时候快速显示对象的值。
例如,给Student类重写toString()方法:

package my;

public class Student
{
	public String id;
	public String name;
	public boolean sex;
	
	@Override
	public String toString()
	{
		String s = "学号: " + id + ", 姓名: " + name ;
		
		if ( sex ) 
		{
			s = s + "(男)";
		}
		else
		{
			s = s + "(女)";
		}
		return s;
	}
}
package my;

public class HelloWorld
{

	public static void main(String[] args)
	{
		Student std = new Student() ;
		std.id = "10086";
		std.name = "徐同学";
		
		System.out.println("完成");
		
	}

}

在调试状态下,观察对象的值的显示格式。
荐
                                                        Java自学笔记3
在debug的时候可以使调试更加方便

五、多态

多态是设计上的一个术语。(polymorphism)在Java里,多态 是指以下语法现象:
① 重载 Overload: 方法允许重名
② 重写 Override:允许子类重写父类的方法
③ 泛型(模板): 以后学习,ArrayList的时候回学到
用一个比喻来说:
Pie: 饼干
ApplePie: 苹果味饼干, 继承于Pie
Baby: 小孩
public class Baby
{
public void eat( Pie p) {} // 宝宝吃饼干
}
Pie p = new ApplePie();//有一块饼干p,是苹果味饼干
Baby bb = new Baby();// 有一个宝宝
bb.eat( p );// 宝宝要吃饼干。苹果味饼干是一种饼干。

1、子类与父类的类型转换

1 子类转成父类顺利成章的(隐式转换)
ApplePie p1 = new ApplePie();
Pie p2 = p1; // 类型转换: ApplePie -> Pie

2 父类型转成子类型要谨慎(初学可以暂时跳过)
ApplePie p3 = (ApplePie) p2; // 显式转换,由于p2(被转换)实际指向的对象类型是ApplePie,所以可以转换

(重点!!!)当调用一个方法时,不是看引用的类型,而是看对象的实际类型。

思考:

MyVideoFile f1 = new MyVideoFile();
	f1.name = "abc.mp4";
	f1.size = 14000;
	f1.duration = 130;		
	MyFile file = f1;
       file.info();    -

调用的是父类的info()还是子类的?
答: file指向的是一个MyVideoFile对象,因而调用的是子类的info()方法。

2、所有对象都是Object

在Java里,由于所有的类型都是Object的直接或间接子类,所以:
Object x = new MyVideoFile();
没问题。

六、关于 toString

在前面,我们知道了
所有的类都继承于 Object
所有的类都可以重写 Object.toString() 方法

我们首先看个例子:

package my;
public class Student
{
	public String id;     // 学号
	public String name;   // 姓名
	public boolean sex;  // 性别
	
	@Override
	public String toString()
	{
		String s = "学号: " + id + ", 姓名: " + name ;		
		if ( sex ) 
		{
			s = s + "(男)";
		}
		else
		{
			s = s + "(女)";
		}
		return s;
	}	
}
Student stu = new Student();
	stu.id = "1008611";
	stu.name = "徐同学";
	stu.sex = true;		
	System.out.println("学生信息: " + stu);

思考:为什么字符串可以和Student对象可以直接拼接?

1、toString

当字符串与Student对象拼接时,等效于:
System.out.println("学生信息: " + stu.toString() );
而其中stu.toString() ,就是将stu对象转成字符串显示。

2、toString() 的默认实现

如果一个类没有重写 toString() ,则使用 Object的默认实现。
演示: 去掉 Student 类的toString() 方法,观察输出,结果如下
荐
                                                        Java自学笔记3

结论: Object.toString() 默认格式为 :类名@对象地址


第十二章 包

一、包

包 ( Package ) : 在Java里用于对Class进行分目录分层管理。实际上,包就是Windows目录结构。

1、新建包 Package

直接输入包的全路径,例如 af.util ,即可创建包

2、类的路径

一个类XXX,对应的文件是XXX.java
类的全路径:af.util.AfMath
对应的文件路径:af/util/AfMath.java
在Eclipse下,右键 Show in | System Explorer

3、新建Class

右键点一个包,在这个包下添加Class
类的第一行表明本类所在的包路径。由Eclipse自动添加。
注:package声明的路径必须与该文件的实际路径一致。(让Eclipse自动完成,不要手写)
eg:package af.util;

4、引入包import

如果要使用别的包下的类,一般有两种写法:

import af.util.AfMath; // 直接指定类的全路径
import af.util.*; // 一次导入该包下的所有类。

让Eclipse自动添加import声明,不要手写。

5、包的显示

在Eclipse里有两种形式显示包:
Flat : 扁平化显示
Hierarchical: 层级显示(树状显示,推荐)

总的来说

package用于按目录的方式组织Class
package声明: 声明本类所在的路径
import声明:导入所需要的类

二、Eclipse的快捷操作(比较好用,博主亲情推荐全部记住)

1、文件的拷贝

Eclipse 与 文件管理器 之间可以互相拷贝。
其中有文件拷贝到Eclipse与 从Eclipse拷贝文件两种操作

2、同步

如果手工修改了文件
Package Explore | 右键 Refresh

3、包名错误

解决方法:鼠标移到提示错误处,按提示项进行修改

4、改名

如果修改包名、类名、方法名、属性名:
①选中对硬的包名、类名、方法名、属性名
② 右键 Refactor | Rename …进行修改

5、其他操作

保存 CTRL + S
注释 CTRL + /
查看定义 CTRL + 鼠标点击
打开提示 ATL + /
格式化选中代码 CTRL + SHIFT + F

通过以上的快捷操作的介绍,希望可以提高每一位读者的开发效率

本文地址:https://blog.csdn.net/qq_45952745/article/details/107143280