zoukankan      html  css  js  c++  java
  • java学习day09--面向对象--访问控制符+抽象类

    访问控制符

      用来控制一个类,或者类中的成员的访问范围。

    抽象类

      概念  

          Java中可以定义没有方法体的方法,该方法由其子类来具体的实现。该没有方法体的方法我们称之为抽象方法,含有抽象方法的类我们称之为抽象类。

        抽象类可以理解为是一个只有方法声明没有方法体的特殊类。

      特点 

    1、  通过java关键字abstract实现
    2、  可以修饰方法或者类
    3、  抽象类中可以没有抽象方法(由子类去实现)
    4、  如果类中有抽象方法,那该类必须定义为一个抽象类
    5、  子类继承了抽象类以后,要么还是一个抽象类,要么就把所有抽象方法都重写
    6、  多用于多态中
    7、  抽象类不可以被实例化

      案例

    package cn.tedu.abstractdemo;
    
            //这个类用来测试 抽象类
            public class Test5_Abstract {
                public static void main(String[] args) {
                    // 创建多态对象测试
                    Animal an = new Dog();
                    an.eat();
                    an.play();
                }
            }
            // 2、如果一个类中,包含了抽象方法 ,这个类必须是抽象类
            // 3、抽象类是一个特殊的 类 ,特殊在 抽象类里 可以包含 抽象方法
            abstract class Animal {
                // 1、如果方法没有方法体,就是抽象方法,使用abstract关键字
                abstract public void eat();
    
                public void play() {
                    System.out.println("Animal...play()");
                }
            }
            // 4、子类 如果 继承了 抽象的父类 ,子类两条路:把所有抽象方法都重写 或者 是一个抽象的子类。
            // abstract class Dog extends Animal{
            class Dog extends Animal {
                //5、重写抽象方法
                public void eat() {
                    System.out.println("狗吃肉");
                }
            }

     抽象类的使用

      抽象类中构造方法的使用

        1、抽象类不能被实例化

        2、抽象类本身不能创建对象,但是,为什么会提供构造方法? ---  是为了子类创建对象时调用  !! 

    package cn.tedu.abstractdemo;
    
            //这个类用来测试 抽象类的 使用
            public class Test1_UseAbstract {
                public static void main(String[] args) {
                    //创建多态对象测试
            //            new Animal() ;  //1、抽象类不能被实例化
                    Animal a = new Dog() ; 
                }
            }
            //创建抽象类
            abstract class Animal{
                //3、抽象类本身不能创建对象,但是,为什么会提供构造方法? ---  是为了子类创建对象时调用  !!
                public Animal() {    //构造方法
                    System.out.println("Animal  ... 无参构造");
                }
            }
            class Dog extends Animal{
                public Dog() {
                    //2、子类无参构造中,隐藏着super()
                    super() ;
                    System.out.println(" Dog  ...无参构造");
                }
            }

      抽象类中成员变量的使用

         1、抽象类中可以有成员变量

         2、抽象类中可以有常量

    package cn.tedu.abstractdemo;
            //这个类用来测试 抽象类的 使用成员变量
            public class Test2_UseAbstract {
                public static void main(String[] args) {
                    //创建多态对象测试
                    Animal2 a = new Dog2();
                    System.out.println(  a.name  );
                    
                    System.out.println( Animal2.COUNTRY );
                }
            }
            //创建抽象类
            abstract class Animal2{
                //1、抽象类中可以有成员变量
                String name = "jack" ;
                //2、抽象类中可以有常量吗? -- 可以有
                static final String COUNTRY  =  "中国" ;
            }
            class Dog2 extends Animal2{
            }

      抽象类中成员方法的使用

        1、抽象类是一个特殊的类 ,特殊在里面可以有抽象方法和普通方法。(关键看需不需要方法体)

        2、子类如果  继承的父类是一个  抽象类。子类两条路:要么重写所有抽象方法,要么抽象的子类

        3、普通方法重写或者不重写,看你需不需要修改方法体,不需要时也可以不重写。

        4、抽象方法一般都会重写,否则就是一个抽象类了。重写了就用子类的方法体。

            package cn.tedu.abstractdemo;
            //这个类用来测试 抽象类的 使用成员方法
            public class Test3_UseAbstract {
                public static void main(String[] args) {
                    //创建多态对象测试
                    Animal3 an = new Dog3() ;//父类引用 指向 子类对象
                    an.show();//3、普通方法重写或者不重写,看你需不需要修改方法体,不需要时也可以不重写。
                    
                    an.eat();//编译看左边,运行看右边
                    an.play();//4、抽象方法一般都会重写,否则就是一个抽象类了。重写了就用子类的方法体。
                }
            }
            //1、抽象类是一个特殊的类 ,特殊在里面可以有抽象方法和普通方法。(关键看需不需要方法体)
            abstract class Animal3{
                abstract public void eat() ;
                abstract public void play() ;
                public void show() {
                    System.out.println("show()...");
                }
            }
            //2、子类如果  继承的父类是一个  抽象类。子类两条路:要么重写所有抽象方法,要么抽象的子类
            //abstract class Dog3 extends Animal3{
            class Dog3 extends Animal3{
                @Override//就是一个重写方法的标记 --- 注解!
                 public void eat() {
                     System.out.println("eat()...");
                 }
                @Override
                 public void play() {
                     System.out.println("play()...");
                 }
            }
  • 相关阅读:
    <汇编语言(第2版)>2011032501
    【转】Debug命令详解
    <海量数据库解决方案>2011032401
    <海量数据库解决方案>2011032301
    <海量数据库解决方案>2011032501
    <汇编语言(第2版)>2011032901
    <海量数据库解决方案>2011033101
    <汇编语言(第2版)>2011032301
    <汇编语言(第2版)>2011032701
    <汇编语言(第2版)>2011040201
  • 原文地址:https://www.cnblogs.com/liqbk/p/12878699.html
Copyright © 2011-2022 走看看