栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java基础 (七)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java基础 (七)

目录

         多态

static关键字

抽象类

接口

内部类


多态

    动态编译:类型--->可扩展性

    同一方法可以根据发送对象的不同而采用多种不同的行为方式

    一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多(父类或者有关系的类)

    多态存在的条件

    有继承关系

    子类重写父类方法

    父类引用指向子类的方法

    注意:多态是方法的多态,属性没有多态性

    static是方法,属于类,不属于实例,故没有多态

    final 常量,没有多态

    private方法,私有的,没有多态

        public static void main(String[] args) {
             //一个对象的实际类型是确定的
             //new Student()
             //new Person()
             //可以指向的引用类型就不确定了
     ​
             Student s1 = new Student();  //student能调用的方法都是自己的,或者继承父类的
             Person s2  = new Student();  //父类的引用指向子类,但是不能调用子类独有的方法
             Object s3  = new Student();
     ​
             s1.run();  //子类重写了父类的方法,执行子类的方法
             s2.run();
     ​
             
             s1.eat(); //
             ((Student) s2).eat(); //可以强制转换,由父转子,即高转低
     //        s2.eat();  //父类的引用指向子类,执行了子类中有而父类中没有的方法会报错
         }

    instanceof 类型转换

        public static void main(String[] args) {
             //Object > String
             //Object > Person >Teacher
             //Object > Person >Student
             //System.out.println(X instanceof Y); //如果X与Y之间存在关系,则编译通过,否则报错
                                                   //注意必须是单线上的关系
             Object object = new Student();
     ​
             System.out.println(object instanceof  Student); //ture
             System.out.println(object instanceof  Person);  //ture
             System.out.println(object instanceof  Object);  //ture
             System.out.println(object instanceof  Teacher); //false
             System.out.println(object instanceof  String);  //false
             System.out.println("=======================");
     ​
             Person person = new Student();
             System.out.println(person instanceof  Student); //ture
             System.out.println(person instanceof  Person);  //ture
             System.out.println(person instanceof  Object);  //ture
             System.out.println(person instanceof  Teacher); //false
     //        System.out.println(person instanceof  String);  //编译报错
             System.out.println("=======================");
     ​
             Student student = new Student();
             System.out.println(student instanceof  Student); //ture
             System.out.println(student instanceof  Person);  //ture
             System.out.println(student instanceof  Object);  //ture
     //        System.out.println(student instanceof  Teacher); //编译报错
     //        System.out.println(person instanceof  String);   //编译报错
         }
     ​
     ​
     ================================================================================
         public static void main(String[] args) {
             //类型之间的转换   父    子
             //高 ------------------->  低 (需要强制转换)
             Person obj  = new Student();
             //obj.go();  //当前obj对象为Person类型,可以转为Student类型,然后便可用Student的方法
             Student student = (Student) obj;
             student.go();  //已然转换为student类型,可以使用Student的方法
             ((Student) obj).go(); //也直接一步转换输出
     ​
             //低 ------------------->  高 (自动进行)
             //子类转父类,可能丢失自己的本来一些方法
             Student student1 = new Student();
             student.go();
             Person person = student1;
         }

父类引用指向子类的对象

把子类转换为父类,向上转型:自动进行

把父类转换为子类,向下转型:强制转换

方便方法的使用,减少重复的代码

static关键字

    static的主要意义是在于创建独立于具体对象的域变量或者方法。以致于即使没有创建对象,也能使用属性和调用方法!

    注意,静态只能被静态访问

    static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。

    只会在类加载的时候执行一次。因此,很多时候会将一些只需要进行一次的初始化操作都放在static代码块中进行。

     //匿名代码块,执行比构造方法先,比静态代码块慢
     {
         System.out.println("匿名代码块");
     }
 ​
     //静态代码块:与类同时加载,因此在三个里面最先执行,且只会执行一次
     static{
         System.out.println("静态代码块");
     }
 ​
     //构造方法:方法里面最先执行的,但是比静态代码块和匿名代码块慢执行
     public Person() {
         System.out.println("构造方法");
     }
 ​

    静态导入包

抽象类

    抽象类也是一种类,也是由extends单继承

    抽象类只有抽象方法的方法名字,没有方法的实现

    不能用new这个抽象类,只能靠子类去实现它---->约束作用

    抽象类中可以写普通方法

    抽象方法只能在抽象类中

    总结就是抽象的抽象---->约束作用

    问题:

    存在构造器吗? 答:抽象类可以有构造方法,只是不能直接创建抽象类的实例对象而已。在继承了抽象类的子类中通过super()或super(参数列表)调用抽象类中的构造方法

    存在的意义? 答:提高开发效率

接口

    区分

    普通类:只有具体的实现

    抽象类:具体实现和规范(抽象方法)都有

    接口:只有规范!自己无法写方法---->专业的规范(约束和实现分离)

    interface 定义的关键字

    定义

    接口中的所有方法定义都是抽象的 public abstract

    接口中的所有常量定义都是抽象的 public static final

    类可以实现多个接口,implements关键字--->实现接口的方法

    实现接口的类,就需要重写接口中的方法

    可以利用接口实现多继承

    接口不能被实例化,因为接口中没有构造方法

内部类

    成员内部类

    可以通过外部类来实例化内部类

    内部类可以获得外部类的私有属性

     public class outer {
         private int id=10;
         public class Inner{
             public void  in (){
                 System.out.println(id);
             }
         }
     }
     ​
     ​
     public class Application {
         public static void main(String[] args) {
             outer outer = new outer();
             //通过外部类来实例化内部类
             outer.Inner inner = outer.new Inner();
             inner.in();
         }
     }

    静态内部类

    一个java文件中可以有多个class文件,但是只要有一个public class文件

    局部内部类

     public class Application {
         //局部内部类
         public void method(){
             class Inner{
     ​
             }
         }
     }

    匿名内部类

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/760609.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号