1.OOP特征二:继承性
package day11;
/*
*面向对象的特征之二:继承性 why?
*
* 一、继承性的好处:
* ①继承的出现减少了代码冗余,提高了代码的复用性。
②继承的出现,更有利于功能的扩展。
③继承的出现让类与类之间产生了关系,提供了多态的前提。
*
* 二、继承性的格式:class A extends B{}
* A:子类、派生类、subclass
* B:父类、超类、基类、superclass
*
* 2.1 体现:一旦子类A继承父类B以后,子类A就获取了父类B中的声明的所有的属性、方法
* 2.2 子类继承父类以后,还可以声明自己特有的属性或方法,实现功能的扩展
* 子类和父类的关系,不同于子集和集合的关系
*
* 三、Java继承性的一些规定
* 3.1Java只支持单继承和多层继承,不允许多重继承
3.2一个子类只能有一个父类
3.3一个父类可以派生出多个子类
class SubDemo extends Demo{ } //ok
class SubDemo extends Demo1,Demo2...//error
3.4 子类直接继承的父类,称之为:直接父类。间接继承的父类称之为:间接父类
3.5 子类继承父类以后,就获取了直接父类以及所有间接父类中声明的属性和方法
四、1.如果我们没有显式的声明一个类的父类的话,则此类继承与java.lang.Object类
2.所有的java类(除java.lang.Object类之外)都直接或间接继承于java.lang.Object类
*/
public class ExtendsTest {
public static void main(String[] args) {
Person p1=new Person();
p1.age=18;
p1.eat();
Student s1=new Student();
s1.eat();
s1.sleep();
}
}
2.方法的重写(override)
3.四种访问权限修饰符
4.关键字:super
5.子类对象实例化过程
6.OOP特征三:多态性
多态性方法的使用
多态性是一个编译时行为还是一个运行时行为?
答案:多态性是一个运行时行为!
7.Object类的使用
package atguigu.java;
/*
* java.lang.Object类
* 1.object类是所有Java类的根父类
* 2.如果在类的声明中未使用extends关键字指明其父类,则其默认父类就是java.lang.Object类
* 3.Object类中的功能(属性、方法)就具有通用性
* 属性:无
* 方法:equals()\ tostring() \getclass() \hashCode()\clone() \finalize()
* wait()\ notify()
*
*
*
*/
public class ObjectTest {
public static void main(String[] args) {
Order order =new Order();
System.out.println(order.getClass().getSuperclass());
}
}
class Order{
}
7.1 Equals方法
package atguigu.java;
/*
* 面试题:==和equals()的区别
*
* 一、回顾==的使用
* ==:运算符
* 1.可以使用在基本数据类型变量和引用数据类型变量中
* 2.如果比较的是基本数据类型变量,比较两个变量保存的数据是否相等(不一定类型相同)
* 如果比较的是引用数据类型变量,比较两个数据的地址值
*
* 二、equals()方法的使用
* 1.是一个方法,而非运算符
* 2.只能适用于引用数据类型
* 3.Object类中equals的定义:
* public boolean equals(Object obj){
* return (this == obj);
* }
* 说明:Object类中定义的equals()和==的作用是相同的,
* 比较两个对象的地址值是否相同,即两个引用是否指向同一个对象实体
*
*/
public class EqualsTest {
public static void main(String[] args) {
int i=10;
int j=10;
double d=10.0;
System.out.println(i==j);//true
System.out.println(i==d);//true
char c=10;
System.out.println(i==c);//true
char c1=65;
char c2='A';
System.out.println(c1==c2);//true
Customer cust1 =new Customer("Tom",21);
Customer cust2 =new Customer("Tom",21);
System.out.println(cust1 ==cust2); //false
String str1=new String("shangguigu");
String str2=new String("shangguigu");
System.out.println(str1==str2); //false
System.out.println("*********************");
System.out.println(cust1.equals(cust2));//false
System.out.println(str1.equals(str2));//true
//任何情况下,x.equals(null)的返回值永远是false
System.out.println("**********************");
System.out.println(cust1.equals(null));
}
}
7.2 ToString方法
package atguigu.java;
import java.util.Date;
/*
*Object类中toString的使用
*
* 1.当我们输出一个对象的引用时,实际上就是调用当前对象的tostring()
*
* 2.Object类中toString()的定义:
* public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
*
*
* 3.像String date file 包装类等都重写了object类中的tostring()方法
* 使得在调用对象的tostring()时,返回"实体内容"信息
*
* 4.自定义类也可以重写tostring()方法
*
*/
public class ToString {
public static void main(String[] args) {
Customer cust1 =new Customer("Tom",21);
System.out.println(cust1); //atguigu.java.Customer@15db9742
System.out.println(cust1.toString()); //atguigu.java.Customer@15db9742
String str =new String("MM");
System.out.println(str); //MM
Date date =new Date(127836217836l);
System.out.println(date.toString());//Sat Jan 19 22:03:37 CST 1974
}
}
7.3 JUnit独立单元测试的使用
package atguigu.java2;
import java.util.Date;
import org.junit.Test;
import org.omg.CORBA.PUBLIC_MEMBER;
/*
* Java中的JUnit单元测试
*
* 步骤:
* 1.选中当前工程- 右键选择:build path -add libraries -JUnit 4 -下一步
* 2.创建一个java类进行单元测试。
* 此时的java类要求:1.此类是public的 2.此类提供公共的无参的构造器
* 3.此类中声明单元测试方法。
* 此时的单元测试方法,方法的权限是public,没有返回值,没有形参
*
* 4.此单元测试方法上需要声明注解:@Test,并在单元测试类中导入:import org。JUnit。Test
*
* 5.声明好单元测试方法以后,就可以在方法体内测试相关代码
*
* 6.写完代码以后,左键双击单元测试方法名,右键:run as -JUnit
*
* 说明:
* 1.如果执行结果没有任何异常:绿条
* 2.如果执行结果出现异常:红条
*/
public class JUunitTtest {
@Test
public void testEquals(){
String s1 = "MM";
String s2 = "MM";
System.out.println(s1.equals(s2));
//ClassCastException的异常
// Object obj =new String("GG");
// Date date =(Date)obj;
}
}
8.包装类的使用
需要了解的是基本数据类形、包装类、string三者之间的相互转换
package atguigu.java2;
import java.lang.reflect.Method;
import org.junit.Test;
/*
*包装类的使用:
* 1.Java提供了8中基本数据类型对应的包装类,使得基本数据类型的变量具有类的特征
*
* 2.掌握的:基本数据类形、包装类、string三者之间的相互转换
*
*
*
*/
public class WrapperTest {
//String类型----->基本数据类型、包装类:调用包装类的parseXxx()
@Test
public void test5(){
String str1="123";
//错误:要想进行强制类型转换,前提是两者有子父类关系
// int num1=(int)str1;
// Integer in1=(Integer)str1;
//可能会报错:NumberFormateException
int num2=Integer.parseInt(str1);
System.out.println(num2+1);
String str2="true1";
boolean b1=Boolean.parseBoolean(str2);
System.out.println(b1); //false
}
//基本数据类型、包装类----->String类型 :调用String重载的valueof(Xxx xxx)
@Test
public void test4(){
int num1=10;
//方式一:连接运算
String str1 =num1 +"";
//方式二:调用String的valueof(Xxx xxx)
float f1 =12.3f;
String str2 =String.valueOf(f1);//"12.3"
Double d1=new Double(12.4);
String str3 =String.valueOf(d1);//"12.4"
System.out.println(str2);
System.out.println(str3);
}
//*******************************************************
/*
*JDK 5.0新特性:自动装箱和拆箱
*
*/
@Test
public void test3(){
// int num1 =10;
// //基本数据类形--->包装类的对象
// Method(num1);
//自动装箱:基本数据类型--->包装类
int num2=10;
Integer in1=num2;//自动装箱
boolean b1=true;
Boolean b2=b1; //自动装箱
//自动拆箱:包装类--->基本数据类型
System.out.println(in1.toString());
int num3=in1;//自动拆箱
}
public void Method(Object obj){
System.out.println(obj);
}
//*******************************************************
//包装类--->基本数据类型:调用包装类的xxxValue()
@Test
public void test2(){
Integer in1 =new Integer(12);
int i1=in1.intValue();
System.out.println(i1+1);
Float f1 =new Float(12.3);
float f2=f1.floatValue();
System.out.println(f2+2);
}
//*******************************************************
//基本数据类型--->包装类:调用包装类的构造器
@Test
public void test1(){
int num1=10;
Integer in1=new Integer(num1);
System.out.println(in1.toString());
Integer in2=new Integer("123");
System.out.println(in2.toString());
//报异常,只有string是纯数字的时候才可以使用
// Integer in3=new Integer("abc123");
// System.out.println(in3.toString());
Float f1=new Float(12.3);
Float f2=new Float(12.3f);
System.out.println(f1);
System.out.println(f2);
Boolean b1 =new Boolean(true);
Boolean b2 =new Boolean("tRuE");//true,不区分大小写
Boolean b3 =new Boolean("true123");//false
System.out.println(b3);
}
}