Java基础再复习(继承、多态、方法内部类**、HashMap用法**、参数传递**)
###继承:
package com.shiyan;
public class Animal {
public int legNum; //动物四肢的数量
//类方法
public void bark() {
System.out.println("动物叫!");
}
}
package com.shiyan;
public class Dog extends Animal {
public void bark(){
System.out.println(“汪汪汪!”);
}
}
class Test{
public static void main(String[] args) {
Animal a = new Animal(); // Animal 对象
Dog d = new Dog(); // Dog 对象
Animal b = new Dog(); // Dog 对象,向上转型为Animal类型
a.bark();// 执行 Animal 类的方法
d.bark();//执行 Dog 类的方法
b.bark();//执行 Dog 类的方法
}
}
###多态(它的前提是继承,一般至少两个类)
一、对象的多种形态
1.引用多态
父类的引用可以指向本类的对象
父类的引用可以指向子类的对象
2.方法多态
创建本类对象时,调用的方法为本类的方法。
创建子类对象时,调用的方法为子类的重写方法或继承的方法。
package OOP;
public class Animal {
public void eat(){
System.out.println("动物吃东西");
}
}
package OOP;
public class Dog extends Animal{
public void eat(){
System.out.println("狗吃肉!");
}
public void watchDoor(){
System.out.println("狗看门!");
}
}
package OOP;
public class Cat extends Animal{
}
package OOP;
public class Inital {
public static void main(String[] args) {
Animal obj1=new Animal();
//同一个类的引用既可以指向本类,也可以指向子类
Animal obj2=new Dog();
//......,可以指向子类
//Dog obj3=new Animal();不可以子类引用指向父类对象
Animal obj4=new Cat();
obj1.eat();
obj2.eat();
//obj2.watchDoor(); 多态,测试类中不可以调用子类独有的方法
obj4.eat();
}
}
二、引用类型转换
1.向上类型转换(隐式、自动类型转换),是小类型到大类型的转换(安全的)
2.向下类型转换(强制类型转换),是大类型到小类型的转换(不安全的,可能会溢出)
3.instanceof运算符,来解决引用对象的类型,避免数据类型转换的安全性问题。
package OOP;
public class Inital {
public static void main(String[] args) {
Dog dog=new Dog();//创建dog对象空间
Animal animal=dog;//自动类型提升 向上类型转换
//可以编译通过,可以类型转换
if(animal instanceof Dog){
Dog dog2=(Dog)animal;//向下类型转换,强制类型转换
}else{
System.out.println(“无法进行类型转换!转换成Dog类型”);
}
//编译无法通过,不可以类型转换
if(animal instanceof Cat){
Cat cat=(Dog)animal;//1.编译时,Cat类型 2.运行时 Dog类型 因为之前开辟的是dog空间
}else{
System.out.println(“无法进行类型转换!转换成Cat类型”);
}
}
}
————————————————————————————————————
###Java中的方法内部类
特点:方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见。
package OOP;
/*方法内部类要创建对象才可以调用*/
public class MOuter {
//外部类中的方法
public void show(){
final int a=25;
int b=13;
//方法内部类
class MInner{
int c=2;
public void print(){
System.out.println("访问外部类的方法中的常量:"+a);
System.out.println("访问内部类中的变量:"+c);
}
}
/**由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问 控制符和 static 修饰符。*/
//必须创建对象才可以调用内部类中方法
MInner mi=new MInner();
mi.print();
}
public static void main(String[] args) {
MOuter mo=new MOuter();
mo.show();
}
}
练习:package OOP;
//外部类
public class HelloWorld {
private String name="爱慕课";
//外部类show方法
public void show(){
//定义方法内部类
class MInner{
int score=83;
public int getScore(){
return score+10;
}
}
//创建方法内部类的对象
MInner mi=new MInner();
//调用内部类的方法
mi.getScore();
}
//测试方法内部类
public static void main(String[] args) {
//创建外部类的对象
HelloWorld mo=new HelloWorld();
//调用外部类的方法
mo.show();
}
}
HashMap用法练习:
package CollectionExercise; import java.util.HashMap;
import java.util.Scanner; /*
目的:练习HashMap的用法
要求:依据用户名找到对应的电话号码。
*/
public class PhoneBookByMap {
public static void main(String[] args) {
//创建一个HashMap对象,名称为phonebook,键值对的类型均为String
HashMap<String,String> phonebook=new HashMap<String,String>();
//创建扫描器scan用于获取用户输入
Scanner scan=new Scanner(System.in);
//创建一个名为keyword的字符串用于存放用户输入的关键词
String keyword=new String();
//利用自己的initPhoneBook方法为电话簿装入数据,完成其初始化
phonebook=initPhoneBook(phonebook);
//提示用户输入待查询的姓名 打印输出
System.out.println("Input a name that you want to search :");
//将用户的输入信息装入字符串keyword中
keyword=scan.nextLine();
while(keyword!=null){
System.out.println("input a name:");
keyword=scan.nextLine();
}
//若用户输入某个关键词,则按照关键词在phonebook中查找其对应的号码
System.out.println("The result is:");
System.out.println(queryPhone(phonebook,keyword));
scan.close();
} /**该方法用于HashMap的初始化,为了装入一些号码数据,也可以定义这些数据*/
private static HashMap<String,String> initPhoneBook(HashMap<String,String> phonebook){
phonebook.put("shi","1343432545");
phonebook.put("cmx","1645764756");
phonebook.put("ywy","1432543534");
return phonebook;
} private static String queryPhone(HashMap<String, String> phonebook, String keyword) {
//创建存放结果的字符串result
String result=new String(); /**用get方法查询keyword所对应的电话号码,并赋值给result
* put()方法中,参数为关键词key,返回值为其对应的value,未找到对应值时候,返回为空。*/
result = phonebook.get(keyword); //如果未找到用户的电话号码,则将查询的结果修改为未找到该用户
if(result==null){
return "not find this user. ";
} //返回查询结果
return result;
} }
#方法的调用和参数的传递
/*练习:方法的调用
目的:计算两科的平均分
*/
public class PrintScore{
public static void main(String[] args) {
PrintScore a=new PrintScore();
double avgScore=0.0;
int s1=20,s2=30;
int c=s1+s2;
System.out.println("s1+s2="+c);
avgScore=a.compterScore(89,91);
System.out.println(avgScore);
}
/*实参往形参传递*/
public int compterScore(int s1,int s2){
int avgScore=(s1+s2)/2;
return avgScore;
}
}
说明:项目很重要, 复习项目比复习知识点效果好些,进步大些。
Java基础再复习(继承、多态、方法内部类**、HashMap用法**、参数传递**)的更多相关文章
- Java基础笔记-抽象,继承,多态
抽象类: abstract修饰 抽象方法必须定义在抽象类中,抽象类不能创建对象. 在抽象方法中可以不定义抽象方法,作用是:让该类不能建立对象. 特点是: 1.定义在抽象类中 2.方法和类都用abstr ...
- Java基础——面向对象(封装——继承——多态 )
对象 对象: 是类的实例(实现世界中 真 实存在的一切事物 可以称为对象) 类: 类是对象的抽象描述 步骤: 1.定义一个类 (用于 描述人:) ( * 人:有特征和行为) 2.根据类 创建对象 -- ...
- Java基础语法<八> 继承 多态 抽象 反射
1.超类和子类 超类和子类 父类与子类 多态: 一个对象变量可以指示多种实际类型的现象称为多态 一个变量可以引用父类对象,也可以引用其子类对象,这就是多态. 不能将一个超类的引用赋给子类变量,因为调用 ...
- JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题
JAVA基础再回首(二十五)--Lock锁的使用.死锁问题.多线程生产者和消费者.线程池.匿名内部类使用多线程.定时器.面试题 版权声明:转载必须注明本文转自程序猿杜鹏程的博客:http://blog ...
- 第二十九节:Java基础知识-类,多态,Object,数组和字符串
前言 Java基础知识-类,多态,Object,数组和字符串,回顾,继承,类的多态性,多态,向上转型和向下转型,Object,数组,多维数组,字符串,字符串比较. 回顾 类的定义格式: [类的修饰符] ...
- 六、java基础-单例模式_继承_覆盖_多态
1.单例模式: 1)提出原因 是由gof 也就是四人组提出来的.为了保证jvm中某一类型的java对象永远只有一个,同时也是为了节省内存的开销.因为外面程序可以通过new的方法直接调用类里面的构造方法 ...
- Java基础学习笔记七 Java基础语法之继承和抽象类
继承 继承的概念 在现实生活中,继承一般指的是子女继承父辈的财产.在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系. 例如公司中的研发部员工和维护部员工都属于员工, ...
- java面向对象(封装-继承-多态)
框架图 理解面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程强调的是功能行为 面向对象将功能封装进对象,强调具备了功能的对象. 面向对象是基于面向过程的. 面向对象的特点 ...
- Java基础教程(18)--继承
一.继承的概念 继承是面向对象中一个非常重要的概念,使用继承可以从逻辑和层次上更好地组织代码,大大提高代码的复用性.在Java中,继承可以使得子类具有父类的属性和方法或者重新定义.追加属性和方法. ...
随机推荐
- 在Linux直接运行安卓程序
Linux上的软件少得可怜,要是能够直接运行安卓程序,那将是意见很酷的事情. 方法原理:首先这个方法不需要开启安卓虚拟机,是直接在Linux上运行的. 谷歌在很早之前提出了archon的方案,能够直接 ...
- one-hot句子向量 对比度增强
one-hot映射时,如何选取TOPN作为每一个词承载的word2vec的信息? 我们已经知道,对于这种例子: 怎么绑定手机号? 怎么关联手机号? 他们的相似度取决于绑定和关联这两个词如何相似. #取 ...
- 笔记:yum和apt-get的区别
rpm包和deb包是两种Linux系统下最常见的安装包格式,在安装一些软件或服务的时候免不了要和它们打交道. rpm包主要应用在RedHat系列包括 Fedora等发行版的Linux系统上, deb包 ...
- conda常用命令
1. conda基本命令 检查Anaconda是否成功安装 conda --version 检测目前安装了哪些环境 conda info --envs 检查目前有哪些版本的python可以安装: co ...
- leetcode473 Matchsticks to Square
一开始想求所有结果为target的组合来着,但是所选元素不能重叠.用这个递归思想很简单,分成四个桶,每次把元素放在任意一个桶里面,最后如果四个桶相等就可以放进去,有一个地方可以剪枝,假如任意一个桶的元 ...
- php二维数组搜索
$ar = array( 2 => array( 'catid' => 2, 'catdir' => 'notice', ), ...
- ROSETTA使用技巧随笔--score.sc处理
对score.sc的便利操作: $ sort -n -k2 example_score_file.sc 此命令会以score文件的第二列进行排序(sort -n -k2,-n表示对数值型数据排序,可用 ...
- 前端c标签foreach传值给后台
前端c标签foreach传值给后台 <div style="margin-bottom: 10px"> <c:forEach items="${good ...
- 听说,你也一直钟爱着equals。。。
脑补一下final final 用于声明变量/参数/属性.方法和类. 修饰变量:如果变量是基本类型,其值不变:如果是对象,则引用不可再变(内容可变). 修饰方法:方法不可重写(是否可继承取决于方法的访 ...
- Deeplab v3+的结构代码简要分析
添加了解码模块来重构精确的图像物体边界.对比如图 deeplab v3+采用了与deeplab v3类似的多尺度带洞卷积结构ASPP,然后通过上采样,以及与不同卷积层相拼接,最终经过卷积以及上采样得到 ...