java基础题(3)
5.面向对象
5.1封装
5.1.1修改Data类的定义
描述
输入描述:
输出描述:
示例1
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextInt()) {
int x = scanner.nextInt();
int y = scanner.nextInt();
Data data = new Data(x, y);
System.out.println(data.getX() + data.getY());
}
}
//创建内部类和构造方法
static class Data{
private int x;
private int y;
public Data(int x, int y) {
this.x = x;
this.y = y;
}
private int getX() {
return x;
}
private int getY() {
return y;
}
}
}
5.1.2验证年龄
描述
输入描述:
输出描述:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Person p = new Person();
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextInt()) {
int age = scanner.nextInt();
p.setAge(age);
System.out.println(p.getAge());
}
} }
class Person { private int age; //write your code here......
public int getAge() {
return age;
}
public void setAge(int age) {
if (age >200 ) {
this.age = 200;
} else if (age >= 0 && age <= 200) {
this.age = age;
} else if(age <0) {
this.age = 0;
}
} }
5.2继承
5.2.1补全构造方法
描述:
输入描述:
输出描述:
示例1
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextInt()) {
int x = scanner.nextInt();
int y = scanner.nextInt();
int z = scanner.nextInt();
Sub sub = new Sub(x, y, z);
System.out.println(sub.calculate());
}
}
} class Base {
private int x;
private int y; public Base(int x, int y) {
this.x = x;
this.y = y;
} public int getX() {
return x;
} public int getY() {
return y;
}
} class Sub extends Base { private int z; public Sub(int x, int y, int z) { //write your code here
super(x,y);
this.z=z;
}
public int getZ() {
return z;
}
public int calculate() {
return super.getX() * super.getY() * this.getZ();
} }
5.2.2重写计算逻辑
描述
输入描述:
输出描述:
示例1
示例2
输入:1 0
输出:error
import java.util.Scanner;
public class Main { public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextInt()) {
int x = scanner.nextInt();
int y = scanner.nextInt();
Sub sub = new Sub(x, y);
sub.calculate();
}
} } class Base { private int x;
private int y; public Base(int x, int y) {
this.x = x;
this.y = y;
} public int getX() {
return x;
} public int getY() {
return y;
} public void calculate() {
System.out.println(getX() * getY());
} } class Sub extends Base { //write your code here......
public Sub(int x, int y){ //父类的构造方法
super(x, y);
} public void calculate(){
if(getY() == 0) //除数为0
System.out.println("Error");
else
System.out.println(getX() / getY());
} }
5.3多态
5.3.1定义打印方法
描述
输入描述:
输出描述:
示例1
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws Exception {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
String className = scanner.next();
// print就是需要你定义的方法
print(Class.forName(className).newInstance());
}
}
//write your code here......
public static void print(Object obj){
System.out.println(obj.getClass().getName());
}
}
class First {
public String toString() {
return "First";
}
}
class Second {
public String toString() {
return "Second";
}
}
class Third {
public String toString() {
return "Third";
}
}
5.3.2类型判断
描述
输入描述:
输出描述:
import java.util.Scanner;
public class Main { public static void main(String[] args) throws Exception {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
String className = scanner.next();
Base obj = (Base) Class.forName(className).newInstance();
System.out.println(getClassName(obj));
}
} public static String getClassName(Base obj) { //write your code here......
if (obj instanceof Sub1) {
Sub1 sub1 = (Sub1) obj;
return sub1.getClass().getSimpleName();
} else if (obj instanceof Sub2) {
Sub2 sub2 = (Sub2) obj;
return sub2.getClass().getSimpleName();
} else {
return obj.getClass().getSimpleName();
} }
} class Base {
} class Sub1 extends Base {
} class Sub2 extends Base {
}
此处:通过instanceof运算符判断obj是否属于右边类所创建对象,instanceof是Java的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回值为boolean类型。若返回结果为true,若是则调用调用Object的getClass()方法获得Class对象,之后用getSimpleName()方法来获取这个类的名称(此环境下使用getName()方法也可以获得正确结果,但在常规情况下,使用getName()会返回包括包名在内的实体名称,这里需要注意)
注解:instanceof 该运算符是二目运算符,左边的操作元是一个对象,右边是一个类,当左边的对象是右边的类或子类创建的对象时,该运算符运算的结果是true,否则是false。
java基础题(3)的更多相关文章
- Java基础题:集合、String、性能、线程
转载自:Java基础题 https://yq.aliyun.com/articles/601786?utm_content=m_1000001149
- 【原创】这道Java基础题真的有坑!我也没想到还有续集。
前情回顾 自从我上次发了<这道Java基础题真的有坑!我求求你,认真思考后再回答.>这篇文章后.我通过这样的一个行文结构: 解析了小马哥出的这道题,让大家明白了这题的坑在哪里,这题背后隐藏 ...
- java 基础题 很基础, 很有趣
都是一些非常非常基础的题,是我最近参加各大IT公司笔试后靠记忆记下来的,经过整理献给与我一样参加各大IT校园招聘的同学们,纯考Java基础功底, 老手们就不用进来了,免得笑话我们这些未出校门的孩纸们, ...
- Java基础题
问题: 1.请对比一下重载和重写的区别. 2.请对比一下接口和抽象类的异同. 3.写出一个单例模式,并说明其优点. 4.用过String.StringBuffer吗,说出他们的异同. 5.什么是值传递 ...
- 转载 java基础题(面试必知)
1.面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节.抽象包 ...
- 这道Java基础题真的有坑!我求求你,认真思考后再回答。
本文目录 一.题是什么题? 二.阿里Java开发规范. 2.1 正例代码. 2.2 反例代码. 三.层层揭秘,为什么发生异常了呢? 3.1 第一层:异常信息解读. 3.2 第二层:抛出异常的条件解读. ...
- 几个Java基础题
1.java中线程能不能重复start t1.start(); System.out.println("ssss"); t1.start(); 答:第一 ...
- java基础题整理(1)
1.使用length属性获取数组长度,使用length()获取字符串的长度: 2.public.private.protected.friendly区别 public表明该数据成员.成员函数是对所有用 ...
- java基础题集
1.什么是java虚拟机?为什么java被称作是“平台无关的编程语言”? java虚拟机是一个可以执行java字节码的虚拟机进程.java源文件被编译成能被java虚拟机执行的字节码文件. java被 ...
- 从一道题看线程安全--牛客网Java基础题
从一道题看线程安全 Java中的线程安全是什么: 就是线程同步的意思,就是当一个程序对一个线程安全的方法或者语句进行访问的时候,其他的不能再对他进行操作了,必须等到这次访问结束以后才能对这个线程安全的 ...
随机推荐
- 自己给idea下载Scala插件
场景:有时候在idea上直接下载的scala可能因为太新所以有bug,需要手动下载插件 经验:自己下载完之后发现比较老的版本idea根本不让你装,只能装一些跟idea上推荐的scala相近的版本,感觉 ...
- CCF201903-2二十四点
思路描述:最开始的思路是拿一个栈来存储数据和符号,在动手实践的过程中发现行不通,单个数字的char和int转换可以,但是加起来的数据两位数字就很难处理了. 然后就去看了看别人的思路,给了我一个很好的启 ...
- 使用js实现复选框的全选、取消功能
id为all的想设置全选的那个框的id,name为checkname[]的是每个小复选框: 第一种: <script> function checkAll() { var all=docu ...
- properties和XML配置文件内容的获取
@ 目录 总结内容 1. Java中为什么要使用配置文件 2. Java中常用的配置文件类型有哪些以及它们的特点 Properties配置文件 XML配置文件 总结 总结内容 1. Java中为什么要 ...
- Python网络爬虫 - 爬取中证网银行相关信息
最终版:07_中证网(Plus -Pro).py # coding=utf-8 import requests from bs4 import BeautifulSoup import io impo ...
- 变量 数据类型 条件if语句
python是解释型 弱类型编程语言; "优雅", "明确", "简单"; 开发效率非常高; 可移植性; 可扩展性; 可嵌入型. ...
- 检查是否安装ASM
ASM和管理 ASM是一个有效的抽象层,使Oracle数据库可以与叫做DiskGroups的抽象空间一起使用,而不是直接使用DataFiles. Oracle ASM脱离操作系统的文件系统约束,使得对 ...
- 导出带标签的tar包(docker)-解决导出不带标签的麻烦
需求:在docker的本地镜像库中导出tar包给其他节点使用. 如果使用:docker save -o package.tar e82656a6fc 这样形式导出的tar包,安装之后标签会消失解决办法 ...
- php怎么向上取整以5为界
public function test(){ $number = 52093; var_dump( $this->roundNumberVariant( ( int ) $number ) ) ...
- 痞子衡嵌入式:大话双核i.MXRT1170之单独在线调试从核工程的方法(IAR篇)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1170下单独在线调试从核工程的方法(基于IAR). 两年前痞子衡写过一篇<双核i.MXRT1170之Cortex-M ...