学习大数据的第12天———Java面向对象(Oject类、包装类、预习接口相关知识)
java.lang.Object类 ? 1、Object类是所有java类的根父类 ? 2、如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类 ? 3、Object类中的功能(属性、方法)就具有通用性 ? 举例: ? Order order = new Order(); ? System.out.println(order.getClass().getSuperclass); ? 面试题:== 和 equals( ) 的区别 一、回顾==的使用 : 1、运算符: 2、可以使用在基本数据类型变量和引用数据类型变量中 3、如果比较的基本数据类型变量,比较两个变量的保存的数据是否相等,(不一定要类型相同) 4、如果要比较的是引用数据类型变量,比较两个对象的地址值是否相同,则两个对象是否指向同一个堆内存地址 二、equals方法的使用 equals()方法 1、是一个方法而非运算符 2、不能运用在基本数据类型,只适用于引用数据类型 3、Object类中的equals()的定义:跟一样都是根据地址值来进行判断的 4、像String、Date、File、包装类等都重写了Object类中的equals方法,重写以后,不是比较地址相同,而是比较两个对象的“实体内容”的区别
包装类(封装类)的使用:让基本数据类型具有类的特征
基本上数据类型 包装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
boolean Boolean
char Character
基本类型、包装类与String类间的转换
(1)基本数据类型------------->包装类:1
<-------------- 2
1、调用包装类的构造器:
int num = 10;
Integer in1 = new Integer(num);
System.out.println(in1.toString);
Integer in2 = new Integer("123");
System.out.println(in2.toString);
Integer in3 = new Integer("123abc");
System.out.println(in3.toString);//异常,里面只能放纯粹的整型
注意转换boolean时不区分大小写
2、包装类转换基本数据类型:
调用包装类的xxxValue()
Integer in1 = new Integer(12);
int i1 = in1.intValue();
Float f1 = new Float(12.3);
float f2 = f1.floatValue();
JDK5.0新特性:自动装箱和自动拆箱:
int num2 = 10;
Integer in1 = num2;//自动装箱
int num3 = in1;//自动拆箱
(2)基本数据类型------------->String类: 3
<-------------- 4
3、基本数据类型转换String类
(1)直接转换,在后面加空字符串
int num1 = 10;
String str1 = num1 + "";
(2)调用String重载的valueOf()方法:
String str2 = String.valueOf(基本数据类型);
(3)
4、String类调用基本类型
String str1 = "123";//强制转换是不行的,前提是都得是相同的子父类型,比如都是基本数据类型,但是我们可以调用包装类的parseXxx()来实现
int num2 = Integer.parseInt(str1);
(3)String类------------->包装类 5
<-------------- 6
6、包装类转换为String类型
调用toString()方法
包装类的面试题: 如果相面两个题目的输出结果相同吗?格式什么 (1)Object o1 = true ? new Integer(1) : new Double(2.0); System.out.println(o1); (2)Object o2; if(true){ o2 = new Integer(1); }else{ o2 = new Double(2.0); } System.out.println(o2); 答:(1)1.0,Integer的类型提升成double (2)1
预习接口(interface)知识: 类实现接口中的方法,称之为实现类
接口的使用: 1、接口的使用:interface来定义 2、Java中,接口和类是并列的两个结构 3、如何去定义接口,定义接口的成员 3.1、JDK7及以前的时候 只能去定义全局常量和抽象方法 >全局常量:public static final的 >抽象方法:public abstract的 3.2、JDK8 除了定义全局常量和抽象方法之外,还可以定义静态方法、默认方法 4、在java开发中,通过类实现接口,实现(implements)不是继承(extends),如果实现类覆盖了接口中的所有抽象方法,则此实现类就可以实例化,反之此实现类仍为一个抽象类 接口的注意事项: 4.1、接口中不能添加构造器,所以不能实例化
public class InterfaceTest{}
interface Attackable{
void attack();
}
interface Flyable{
//全局变量
public static final int MAX_SPEED = 7900;
public static final int MIN_SPEED = 1;
public abstract void fly();
public abstract void stop();
}
class plane implements Flyable{
@Override
public void fly(){
System.out.println();
}
@Override
public void stop(){
System.out.println();
}
}
class Bullet implements Flyable,Attackable{
}
5、Java类可以实现多个接口————————>弥补了java单继承性的局限性 6、结构:class AA extens BB implements CC,DD…{
} 7、类跟类之间叫继承(单继承)、类跟接口之间叫实现、接口跟接口之间叫继承(可以单个继承,也可以多继承) 因为CC继承AA、BB,所以AA、BB中的方法,CC中都有,而且当一个类实现CC的接口时候,就会实现AA、BB中的抽象方法
interface AA{
void method1();
}
interface BB{
void method2();
}
interface CC extends AA,BB{
}
class DD implements CC{
@Override
public void method1() {
System.out.println("这是一个methon1方法");
}
@Override
public void method2() {
System.out.println("这是一个methon2方法");
}
}
public class InterfaceDemo2 {
public static void main(String[] args) {
DD d = new DD();
d.method1();
d.method2();
}
}
8、接口的具体使用,体现多态性 9、接口,实际上就可以看作是一种规范
/*
接口需要用的时候需要实现类帮助其使用,因为接口无法实例化
1、接口的使用上也满足多态性
2、实际上就是定义了一种规范
创建接口的匿名实现类的对象
1、创建非匿名实现类的非匿名对象
2、创建非匿名实现类的匿名对象
3、创建匿名实现类的非匿名对象
4、创建匿名实现类的匿名对象
*/
interface USB {
void start();
void stop();
}
class Flash implements USB {
@Override
public void start() {
System.out.println("U盘开始工作!!!");
}
@Override
public void stop() {
System.out.println("U盘结束工作!!!");
}
}
class Printer implements USB {
@Override
public void start() {
System.out.println("打印机开始工作!!!");
}
@Override
public void stop() {
System.out.println("打印机结束工作!!!");
}
}
class Computer {
public void teansferData(USB usb) {//USB usb = new Flash();
usb.start();
System.out.println("具体的传说数据细节");
usb.stop();
}
}
public class InerfaceDome3 {
public static void main(String[] args) {
Computer com = new Computer();
Flash flash = new Flash();
com.teansferData(flash);//接口的多态性
/*
创建接口的匿名实现类的对象
1、创建非匿名实现类的非匿名对象
2、创建非匿名实现类的匿名对象
3、创建匿名实现类的非匿名对象
4、创建匿名实现类的匿名对象
*/
System.out.println("*********************************");
System.out.println("创建非匿名实现类的非匿名对象");
Flash f = new Flash();
com.teansferData(f);
System.out.println("创建非匿名实现类的匿名对象");
com.teansferData(new Printer());
System.out.println("创建匿名实现类的非匿名对象");
USB usb = new USB() {
@Override
public void start() {
System.out.println("手机开始运行!!!");
}
@Override
public void stop() {
System.out.println("手机结束运行!!!");
}
};
com.teansferData(usb);
System.out.println("创建匿名实现类的匿名对象");
com.teansferData(new USB() {
@Override
public void start() {
System.out.println("打印机开始运行!!!");
}
@Override
public void stop() {
System.out.println("打印机结束运行!!!");
}
});
}
}
|