zoukankan      html  css  js  c++  java
  • java入门 (七) 面向对象(三)

    java入门(七)面向对象(三)

    1. static关键字详解
    2. 抽象类
    3. 接口的定义与实现
    4. N种内部类

    static关键字详解

    //static
    public class Student {
        private static int age;//静态的变量  多线程里用的多!
        private double score;//非静态的变量
    
    
        public void run(){
    
        }
        public static void go(){
    
        }
        public static void main(String[] args) {
            Student s1 = new Student();
    
        }
    }
    
    public class Person {
        //赋初始值
        {
            System.out.println("匿名代码块");//第二
        }
    
        //只执行一次
        static {
            System.out.println("静态代码块");//第一
        }
    
        public Person() {
            System.out.println("构造方法");//第三
        }
    
        public static void main(String[] args) {
            Person person = new Person();
            System.out.println("======");
            Person person1 = new Person();
        }
    }
    
    //静态导入包
    import static java.lang.Math.random;
    public class Test {
        public static void main(String[] args) {
            System.out.println(random());
        }
    }
    

    抽象类

    abstract修饰符可以用来修饰方法也可以修饰类,如果修饰方法,那么该方法就是抽象方法,如果修饰类,那么该类就是抽象类

    抽象类中可以没有抽象方法,但是抽象方法的类一定要声明为抽象类

    抽象类,不能使用new关键字来创建对象,它是用来让子类继承的

    抽象方法,只有方法的声明,没有方法的实现,它是用来让子类实现的

    子类继承抽象类,那么就必须要实现抽象类没有实现的抽象方法,否则该子类也要声明为抽象类

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

    总结:

    1. 不能new这个抽象类,只能靠子类去实现它,约束
    2. 抽象类中可以写普通方法
    3. .抽象方法必须在抽象类中

    接口的定义与实现

    普通类:只有实现类

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

    **接口:只有规范,无法自己写方法~专业的约束!约束和实现分离:面向接口编程。 **

    接口就是规范,定义的是一组规则,体现了现实世界中,“如果你是..则必然能”的思想。如果你是天使,则必然能飞,如果你是汽车,则必然能跑等

    接口的本质是契约,就像我们的法律一样,制定好后大家都要遵循

    OO的精髓,是对对象的抽象,最能体现这一特点的就是接口。为什么我们讨论设计模式都只针对具备了抽象能力的语言(比如C++,Java,c#等),就是因为设计模式所研究的,实际上就是如何合理的去抽象

    声明类的关键字是class,声明接口的关键字是interface

    //interface 定义的关键字,接口都需要有实现类
    public interface UserService {
        //接口中的所有定义其实都是抽象的, Public
        void add(String name);
        void delete(String name);
        void update(String name);
        void query(String name);
    }
    
    //抽象的思维 Java 架构师~
    //类可以实现接口
    //利用接口实现多继承
    public class UserServiceImpl 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 time() {
    
        }
    }
    

    总结:

    接口的作用

    1. 像法律一样起约束作用
    2. 定义一些方法,让不同的人实现
    3. 所有方法前缀都是 public abstract
    4. 所有常量前缀都是 public static final
    5. 接口不能被实例化接口中没有构造方法
    6. implements可以继承多个接口
    7. 必须要重写接口中的方法

    N种内部类

    扩展

    内部类就是在一个类的内部在定义一个类,比如,A类种定义一个B类,那么B类相对A类来说就称为内部类,而A类相对于B类来说就是外部类了

    1. 成员内部类
    2. 静态内部类
    3. 局部内部类
    4. 匿名内部类
    public class Outer {
        private int id = 10;
    
        public void out(){
            System.out.println("这是外部类的方法");
        }
    
        public class Inner{
            public void in(){
                System.out.println("这是内部类的方法");
            }
            //获得外部类的私有属性,私有方法
            public void getId(){
    
                System.out.println(id);
            }
        }
    }
    
    
    public class Application{
        public static void main(String[] args) {
            //通过new关键字
            Outer outer = new Outer();
            Outer.Inner inner = outer.new Inner();
    
    
    
        }
    }
    
    public class Test {
        public static void main(String[] args) {
            //没有名字初始化类,不用将实例保存到变量中
            new Apple().eat();
        }
    
    }
    class Apple{
        public void eat(){
            System.out.println("1");
        }
    }
    

    复习笔记的参考资料来自B站UP主:狂神说

  • 相关阅读:
    python--Time(时间)模块
    python基础:冒泡和选择排序算法实现
    浅谈python的深浅拷贝
    python随笔--根据号码查询归属地
    python处理字符串:将字符串中的数字相加求和
    Wi-Fi 6解释:下一代Wi-Fi
    Wifi5和Wifi6的区别
    VS Code配置Git环境 X64
    VS Code配置C/C++环境 X64
    MikroTik CCR1036与Tilera GX36处理器
  • 原文地址:https://www.cnblogs.com/XING-ZHI-JI-DA-XUE/p/14201613.html
Copyright © 2011-2022 走看看