判断是否存在父子关系:
1.必须相关的类才能判断
2.x instanceof Y:判断对象X是否是类Y的子类:true,false
3.Object o=new Student:对象o的类型看右边
package com.mingmao.javaobjectoriented.programming.instanceofcode; public class Person { }
package com.mingmao.javaobjectoriented.programming.instanceofcode; public class Student extends Person { }
package com.mingmao.javaobjectoriented.programming.instanceofcode; public class Teacher extends Person { }
package com.mingmao.javaobjectoriented.programming; import com.mingmao.javaobjectoriented.programming.instanceofcode.Person; import com.mingmao.javaobjectoriented.programming.instanceofcode.Student; import com.mingmao.javaobjectoriented.programming.instanceofcode.Teacher; public class Application { public static void main(String[] args) { //Object-Person-Student //Object-Person-Teacher //Object-String Object object=new Student(); System.out.println(object instanceof Object);//true System.out.println(object instanceof Person);//true System.out.println(object instanceof Student);//true System.out.println(object instanceof Teacher);//false System.out.println(object instanceof String);//false Person person=new Student(); System.out.println(person instanceof Object);//true System.out.println(person instanceof Person);//true System.out.println(person instanceof Student);//true System.out.println(person instanceof Teacher);//false //System.out.println(person instanceof String);//报错 Student student=new Student(); System.out.println(student instanceof Object);//true System.out.println(student instanceof Person);//true System.out.println(student instanceof Student);//true //System.out.println(student instanceof Teacher);//报错 } }
类型转换:
package com.mingmao.javaobjectoriented.programming.instanceofcode; public class Person { public void run(){ System.out.println("run=>person"); } }
package com.mingmao.javaobjectoriented.programming.instanceofcode; public class Student extends Person { public void go(){ System.out.println("go=>student"); } }
package com.mingmao.javaobjectoriented.programming; import com.mingmao.javaobjectoriented.programming.instanceofcode.Person; import com.mingmao.javaobjectoriented.programming.instanceofcode.Student; public class Application { public static void main(String[] args) { //类型之间的转换:低转高,自动;高转低,强制 //高转低-强制 //自动转换 Person person = new Student(); //强制转换 Student student = (Student) person; student.go(); ((Student)person).go(); //低转高-自动转换 //会丢失一些方法 Student s=new Student(); //自动转换 Person p=student; s.go(); //p.go();报错 } }
静态属性和方法可以直接通过类名调用
package com.mingmao.javaobjectoriented.programming.staticcode; public class Student { //属性 private static int age; private double score; //方法 public static void go(){ System.out.println("go"); } public void run(){ System.out.println("run"); } public static void main(String[] args) { //调用静态变量两种方法 System.out.println(Student.age); Student s1=new Student();//直接通过类调用 System.out.println(s1.age);//创建对象调用 //调用非静态变量只有一种方法 Student s2=new Student(); System.out.println(s2.score);//创建对象调用 //调用静态方法的两种方法 Student.go();//通过类调用 Student s3=new Student();//创建对象调用 s3.go(); //调用非静态方法只有一种方法 Student s4=new Student();//通过创建对象调用 s4.run(); } }
静态代码块
package com.mingmao.javaobjectoriented.programming.staticcode; public class Person { //静态代码块-只加载一次 static { System.out.println("静态代码块"); } //匿名代码块 { System.out.println("匿名代码块"); } //构造方法 public Person() { System.out.println("构造方法"); } public static void main(String[] args) { Person person=new Person(); //静态代码块 //匿名代码块 //构造方法 Person person1=new Person(); //匿名代码块 //构造方法 } }
静态导入包:可以实现调用其他类的静态方法不加类名直接调用:
被final修饰的类不能继承
package com.mingmao.javaobjectoriented.programming.staticcode; import static java.lang.Math.random; public class Test { public static void main(String[] args) { //返回一个随机数,正常调用random System.out.println(Math.random()); //静态导入包后,调用random System.out.println(random()); } }
package com.mingmao.javaobjectoriented.programming.abstractclass; //抽象类,用来被继承,不能创建对象,单继承 //有抽象方法的类必须定义为抽象类 //可以有抽象方法和普通方法 //凡是继承此类的子类都必须重写此类中的抽象方法,除非子类也是抽象类 public abstract class Action { //抽象方法,只有方法名,没有方法实现 public abstract void doSomething(); }
package com.mingmao.javaobjectoriented.programming.abstractclass; public class A extends Action { @Override public void doSomething() { } }
package com.mingmao.javaobjectoriented.programming.interfacecode; //接口,都需要有实现类,可以多继承 //实现类必须实现接口中的所有方法 //接口中的所有方法都默认是public abstract 的 //接口中所有属性都默认是public static final,所以必须赋值 public interface UserService { //属性,一般不会在接口中定义属性 int age=12; //定义方法 void run(String a); //定义增删改查 void add(String name); void delete(String name); void update(String name); void query(String name); }
package com.mingmao.javaobjectoriented.programming.interfacecode; public interface TimeService { void timer(); }
package com.mingmao.javaobjectoriented.programming.interfacecode; //接口的实现类,可实现多继承 public class UserServiceImpl implements UserService,TimeService { //重写UserService中的方法 @Override public void run(String a) { } @Override public void add(String name) { } @Override public void delete(String name) { } @Override public void update(String name) { } @Override public void query(String name) { } //重写TimeService中的方法 @Override public void timer() { } }
成员内部类
package com.mingmao.javaobjectoriented.programming.innerclass; //内部类可以访问外部类的私有属性 public class Outer { //属性 private int id; //方法 public void out(){ System.out.println("这是外部类的方法"); } //成员内部类 public class Inner{ //方法 public void in(){ System.out.println("这是内部类的方法"); } public void getId(){ System.out.println(id); } } }
package com.mingmao.javaobjectoriented.programming; import com.mingmao.javaobjectoriented.programming.innerclass.Outer; public class Application { public static void main(String[] args) { //创建内部类对象 Outer outer=new Outer(); Outer.Inner inner=outer.new Inner(); //调用内部类方法 inner.in(); inner.getId(); } }
静态内部类
package com.mingmao.javaobjectoriented.programming.innerclass; public class Outer { //属性 private int id; //方法 public void out(){ System.out.println("这是外部类的方法"); } //静态内部类 //不能访问外部类的非静态方法和属性 public static class Inners{ //方法 public static void in(){ System.out.println("这是静态内部类的静态方法"); } } }
package com.mingmao.javaobjectoriented.programming; import com.mingmao.javaobjectoriented.programming.innerclass.Outer; public class Application { public static void main(String[] args) { //访问静态内部类的静态方法 Outer.Inners.in(); } }
同一java类下的类
package com.mingmao.javaobjectoriented.programming.innerclass; public class Outer { //属性 private int id; //方法 public void out(){ System.out.println("这是外部类的方法"); } } //同一java类下的类 //一个java类中只能有一个public类,但可以有多个class class A{ public static void main(String[] args) { } }
局部内部类
package com.mingmao.javaobjectoriented.programming.innerclass; //内部类可以访问外部类的私有属性 public class Outer { //局部内部类-写在方法里面 public void method(){ class Inner{ } } }
匿名内部类
package com.mingmao.javaobjectoriented.programming.innerclass; public class Test { public static void main(String[] args) { //匿名内部类 //没有名字初始化一个类 new Apple().eat(); //接口的匿名实现类 new UserService(){ @Override public void hello() { } }; } } class Apple{ public void eat(){ System.out.println("吃苹果"); } } interface UserService{ void hello(); }
学习视频