Day13

image-20230420131533697

 package com.oop.demo06;
 
 public class Person {
     public void run(){
         System.out.println("run");
    }
 
 
 }
 /*
 多态注意事项
 1.多态是方法的多态,属性没有多态
 2.父类和子类,有联系   类型转换异常! ClassCastException!
 3.存在条件: 继承条件,方法需要重写,父类引用指向子类对象! Father f1 = new Son();
 
     1.static 方法:属于类,它不属于实例
     2.final 常量:
     3.private 方法:
 
 
 //一个对象的实际类型是确定的
         //new Student();
         //new Person();
 
         //可以指向的引用类型就不确定了:父类的引用指向子类
 
         //Student 能调用的方法都是自己的或者继承父亲的!
         Student s1 = new Student();
         //Person 父亲型,可以指向子类,但是不能调用子类独有的方法
         Person s2 = new Student();
         Object s3 = new Student();
 
         //对象能执行哪些方法,主要看对象左边的类型,和右边关系不大!
         s2.run();//子类重写了父类的方法,执行子类的方法
         s1.run();
         s1.ear();
         ((Student) s2).ear();
  */
 package com.oop.demo06;
 
 public class Student extends Person{
         public void go(){
             System.out.println("go");
        }
 
 }
 /*
         //Object > String
         //Object > Person > Teacher
         //Object > Person > Student
         Object object = new Student();
 
         //System.out.println(X instanceof Y);//能不能编译通过
 
         System.out.println(object instanceof Student);
         System.out.println(object instanceof Person);
         System.out.println(object instanceof Object);
         System.out.println(object instanceof Teacher);
         System.out.println(object instanceof String);
 
         System.out.println("===========================");
         Person person = new Student();
         System.out.println(person instanceof Student);
         System.out.println(person instanceof Person);
         System.out.println(person instanceof Object);
         System.out.println(person instanceof Teacher);
         //System.out.println(person instanceof String);
         System.out.println("===========================");
         Student student = new Student();
         System.out.println(student instanceof Student);
         System.out.println(student instanceof Person);
         System.out.println(student instanceof Object);
         //System.out.println(student instanceof Teacher);
         //System.out.println(person instanceof String);
  */
 package com.oop.demo06;
 
 public class Teacher extends Person{
 }
 public class Application {
     public static void main(String[] args) {
         //类型之间的转换: 父   子
 
         //高                   低
         Person student =  new Student();
         //子类转换为父类,可能丢失自己的本来的一些方法!
         //student将这个对象转换为Student类型,我们就可以使用Student类型的方法了!
        ((Student)student).go();
         Student student1 = (Student) student;
         Person person = student;
    }
 }
 /*
 1.父类引用指向子类的对象
 2.把子类转换为父类,向上转型;
 3.把子类转换为父类,向下转型; 强制转换
 4.方便方法的调用,减少重复的代码!简洁
 
 抽象: 封装,继承,多态! 抽象类,接口
  */

 

 package com.oop.demo07;
 
 //static :
 public class Student extends Person{
 
     private static int age;//静态的变量 多线程!
     private double score;//非静态的变量
 
     public void run(){
 
    }
 
     public static void go(){
 
    }
 
     public static void main(String[] args) {
         new Student().run();
         Student.go();
 
    }
 }
 package com.oop.demo07;
 
 public  class Person {
     //2 : 赋初始值
    {
         //代码块(匿名代码块)
         System.out.println("匿名代码块");
    }
     //1 : 只执行一次~
     static {
         //静态代码块
         System.out.println("静态代码块");
    }
     //3
     public Person(){
         System.out.println("构造器方法");
    }
 
     public static void main(String[] args) {
         Person person1 = new Person();
         System.out.println("=======");
         Person person2 = new Person();
    }
 }
 package com.oop.demo07;
 
 //静态导入包~
 import static java.lang.Math.PI;
 import static java.lang.Math.random;
 public class Test {
     public static void main(String[] args) {
         System.out.println(random());
         System.out.println(PI);
    }
 }

image-20230424132248573

 package com.oop.demo08;
 
 //abstract 抽象类:extends : 单继承~ 接口可以多继承
 public abstract class Action {
 
     //约束~有人帮我们实现~
     //abstract , 抽象方法,只有方法名,没有方法的实现!
     public abstract void doSomething();
 
     //1.不能new这个抽象类,只能靠子类去实现它;约束
     //2.抽象类中可以写普通方法
     //3.抽象方法必须在抽象类中
     //抽象的抽象:约束~
 
 
 }
 package com.oop.demo08;
 
 //抽象类的所有方法,继承了它的子类,都必须要实现它的方法~ 除非~
 public class A extends Action{
 
     public void doSomething(){
 
    }
 
 }

image-20230424133617256

 package com.oop.demo09;
 
 
 //抽象的思维~ java 结构师~
 //interface 定义的关键字, 接口都有实现类
 public interface UserService {
 
     //常量~ public static final
     int AGE=99;
 
     //接口中的所有定义其实都是抽象的 public abstract
     void add(String name);
     void delete(String name);
     void update(String name);
     void query(String name);
 }
 package com.oop.demo09;
 
 
 //出现了:extends~
 //类 可以实现接口implements 接口
 //实现了接口的类,就需要重写接口中的方法~
 
 //多继承~利用接口实现多继承
 public class UserServicelmpl implements UserService,TimeService{
 
     @Override
     public void add(String name) {
 
    }
 
     @Override
     public void delete(String name) {
 
    }
 
     @Override
     public void update(String name) {
 
    }
 
     @Override
     public void query(String name) {
 
    }
 
     @Override
     public void timer() {
 
    }
 }
 package com.oop.demo09;
 
 public interface TimeService {
     void timer();
 }
 作用:
     1.约束
     2.定义一些方法,让不同的人实现~
     3.public abstract
     4.public static final
     5.接口不能被实例化~,接口中没有构造方法~
     6.implements 可以实现多个接口
     7.必须要重写接口中的方法
     8.总结博客
 
posted @   zhang6611  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示