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...//error3.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);//trueSystem.out.println(i==d);//truechar c=10;System.out.println(i==c);//truechar c1=65;char c2='A';System.out.println(c1==c2);//trueCustomer cust1 =new Customer("Tom",21);Customer cust2 =new Customer("Tom",21);System.out.println(cust1 ==cust2); //falseString str1=new String("shangguigu");String str2=new String("shangguigu");System.out.println(str1==str2); //falseSystem.out.println("*********************");System.out.println(cust1.equals(cust2));//falseSystem.out.println(str1.equals(str2));//true//任何情况下,x.equals(null)的返回值永远是falseSystem.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@15db9742System.out.println(cust1.toString()); //atguigu.java.Customer@15db9742String str =new String("MM");System.out.println(str); //MMDate 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 {@Testpublic 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()@Testpublic void test5(){String str1="123";//错误:要想进行强制类型转换,前提是两者有子父类关系// int num1=(int)str1;// Integer in1=(Integer)str1;//可能会报错:NumberFormateExceptionint 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)@Testpublic 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新特性:自动装箱和拆箱**/@Testpublic 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()@Testpublic 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);}//*******************************************************//基本数据类型--->包装类:调用包装类的构造器@Testpublic 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");//falseSystem.out.println(b3);}}





