• java基础(二)


    、面向对象基础

    • 类与对象
    • 封装
    • 构造方法
    • 方法
    • 重载
    • 对象数组
    • this关键字
    • static关键字

    1.1类与对象

    类:类是抽象的,概念上的,共性的,是对象的模板

    对象:个体,具体的,可以看见的,对象是个性的,是该类事物的每个个体,也称为类的实例。

    类的组成:

    • 方法
    • 属性

    对象的创建

    • 类名 对象名= new 类名()

    对象的引用传递问题

    • 注意引用的是对象堆内存的空间

    1.2封装

    面向对象的特性:封装,继承,多态

    封装的概念:使用private实现类的封装,用private关键字修饰属性,修饰方法,private的含义是私有的,使用private修饰的方法和属性不能被外部直接访问。

    封装的特性:通过使用封装的属性,要通过get,set方法来获得和设值。

    1.3构造方法的问题

    构造方法的作用:构造方法的作用主要是用来构造对象并且为对象的属性赋值。构造方法的定义规则:

    • 无需任何的放回值类型
    • 方法名称必须和类重名

    1.4方法

    方法的定义

    public|private|protected|默认  + static|默认|synchroized|native|abstract+返回值类型|void|空+方法名称(参数)+ throws Exception{
       方法体
    
    }

    方法的调用:

    • 如果是普通方法,通过对象去调用
    • 如果是构造方法,通过实例化去调用
    • 如果是静态方法,可以通过类名直接访问

    2.4对象数组

    以类作为数组的类型,以对象作为数组的元素

    Person p[] = new Person[10];//一类作为数组的类型,元素就是对象
            for (int j = 0; j < p.length; j++) {
                Person px = new Person("张三",20+j);
                p[j] = px;
            }
            
            for (int j = 0; j < p.length; j++) {
                Person per = p[j];
                System.out.println(per.getName()+"===="+per.getAge());
    
            }

    2.5方法的重载

    在同一个类中,方法的名称相同,返回值的类型相同,但是参数的个数,类型,顺序不同就叫做重载,重载是面向对象多态性的一个体现。

    //吃饭
        public void eat(){
            System.out.println(name + "在吃饭");
        }
        public void eat(int x){
            System.out.println(name + "在吃饭,吃了"+ x +"碗。");
        }

    2.6this的关键字的用法

    this关键字可以表示当前对象

    this关键字可以表示当前类的属性

    this关键字可以表示调用当前类的方法

    this关键字调用当前类的构造方法

    2.7static关键字

    • static变量的声明和使用
    • static方法的声明及使用
    • static方法块的声明及使用

    static变量:使用static修饰的变量就叫做静态变量

    static方法:使用static修饰的方法就叫做静态方法

    public class OopDemo01 {
        static int score = 70;//静态变量
        double salary = 5000.00;//普通变量
        public static void add(){//静态方法
            //eat();静态方法中不能调用非静态方法
            System.out.println(score);
            //System.out.println(salary);静态方法不能调用非静态变量
        }
        public void eat(){//普通方法
            add();//非静态方法可以调用静态方法
            System.out.println(score);//普通方法可以调用静态变量
            System.out.println(salary);
        }
        public static void main(String[] args) {
            
        }

    对于静态方法调用的问题

    • 静态方法中不能调用非静态方法,静态方法不能调用非静态变量
    • 非静态方法可以调用静态方法,普通方法可以调用静态变量

    栈:保存属性(变量)名称

    堆:保存属性(变量)值

    全局数据区: static修饰的变量

    全局代码区:static修饰的方法

    •   代码块:使用一对{}围起来的就是代码块:
    •        普通代码块:写在方法中的语句
    •        构造块(实例块):直接写在类中的语句,优于构造方法先执行,在实例化多个对象的时候,构造块执行多次
    •        静态块:直接写在类中,使用static修饰,是优于构造块先执行,在实例化多个对象的时候,静态块只执行一次

    面向对象高级部分

    • 继承
    • 抽象类
    • 接口
    • 多态

    2.1继承

    继承的作用:

    • 通过继承可以简化子类的定义
    • 扩展子类的功能

    子类通过extends关键字继承父类

    继承的特点:子类可以继承父类一切非私有的属性和方法

    继承的规定:

    • java只支持单继承,一个类不能同时有多个父类(一个人只有一个父亲一样)
    • java支持多层继承,一个类继承自父类,父类也可以自爷爷类

    子类的实例化过程:实例化子类对象的时候会先调用父类的构造方法,说明父类也进行了实例化对象操作,实际上调用父类的构造方法构造父类对象就是为子类对象开辟空间,而且可以为父类的属性初始值。

    super关键字的使用:父类也称为超类()

    • super关键字可以调用父类的属性(非私有)
    • super可以调用父类的方法(非私有)
    • super关键字可以调用父类的构造方法(必须放在首行)

    方法的复写()

    方法的重写的定义:方法的返回值的类型,方法名称,方法里的参数的个数,顺序,类型一致,就是方法的复写,子类复写父类的方法,调用子类的方法,扩展父类的属性,复写分类的方法子类的访问权限必须要大于等于父类的方法,父类的方法不能为private。

    复写和重载的区别:

    序号

    重载

    覆写

    1概念

    名称相同,参数的个数类型顺序不同

    方法名称相同,访问权限不小于父类被覆写方法,参数相同,返回值类型相同

    2范围

    在同一类中

    在继承关系中,子类覆写父类方法

     访问修饰符

    位置

    private

    默认

    protected

    public

    同类

    V

    V

    V

    V

    同包的类

    X

    V

    V

    V

    不同包的字类

    X

    X

    V

    V

    不同包且不是字类

    X

    X

    X

    V

    public|private|protected|默认  + static|默认|synchroized|native|abstract+返回值类型|void|空+方法名称(参数)+ throws Exception{
       方法体
    
    }

    2.3抽象类

    final :在java中final可以修饰变量方法,类

    • 使用final修饰的变量就是常量,只能赋值一次,而且常量一般使用大写字母来表示常量名称。
    • 使用final修饰的方法不能被子类复写
    • 使用final修饰的就是太监类,不能拥有子类
    • 抽象类:使用abstract修饰的类就是抽象类
    • 抽象方法:使用abstract修饰的方法就是抽象方法
    package com.wanczy.oopHightLevelDemo;
    
    public abstract class OopDemo003 {//定义就是抽象类
        
        public abstract void eat();//声明抽象方法
        
    }

    抽象方法只需要声明不需要实现,有一个抽象方法必须定义为抽象类

    抽象类和普通类相比区别:抽象类比普通类多了抽象方法,普通类中的所有定义都可以在抽象类中使用

    抽象类的使用规则:

    • 抽象类本身不能实例化
    • 抽象类中的抽象方法只需要声明,不需要实现
    • 含有抽象方法的类必须声明为抽象类
    • 抽象类必须要有子类,不然抽象类没有任何意义,抽象类的子类必须要复写抽象类中的全部抽象方法。
    • 抽象类中可以有抽象方法
    • 抽象类中不可以用final声明

    范例:现在有两类员工,一类是技术类,一类是销售类,两种员工的提升工资的方式不一样,技术员工类按照岗位等级提升,销售员工按照上一年度销售业绩来提升工资

    package com.wanczy.abstractDemo;
    
    public abstract class Employee {
        private String name;
        private double salary;//工资
        
        public Employee() {
            super();
            // TODO Auto-generated constructor stub
        }
    
        public Employee(String name, double salary) {
            super();
            this.name = name;
            this.salary = salary;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public double getSalary() {
            return salary;
        }
    
        public void setSalary(double salary) {
            this.salary = salary;
        }
    
        public abstract void updSalary();//提升工资的抽象方法
    }
    package com.wanczy.abstractDemo;
    
    public class TechEmployee extends Employee{
        private String post;//岗位等级
        @Override
        public void updSalary() {
            // TODO Auto-generated method stub
            double salary = super.getSalary();
            if(this.post .equals("高级工程师")){
                super.setSalary(salary*1.05);
                
            }else if(this.post.equals("中级工程师")){
                super.setSalary(salary*1.1);
            }else if(this.post.equals("初级工程师")){
                
                super.setSalary(salary*1.15);
            }
            
        }
        public String getPost() {
            return post;
        }
        public void setPost(String post) {
            this.post = post;
        }
        public TechEmployee(String post) {
            super();
            this.post = post;
        }
        public TechEmployee() {
            super();
            // TODO Auto-generated constructor stub
        }
        public TechEmployee(String name, double salary,String post) {
            super(name, salary);
            this.post = post;
            // TODO Auto-generated constructor stub
        }
        
        
        
    }
    package com.wanczy.abstractDemo;
    
    public class OopDemo01 {
        public static void main(String[] args) {
            Employee e = new SaleEmployee("长桑",3000,100);
            e.updSalary();
            System.out.println(e.getSalary());
        }
    }    

    通过以上程序,我们可以发现,如果以后出现其他的员工类型,提升工资的方式不同,可以编写抽象类的字类完成,不需要更改顶层设计。也就是说抽象类的作用就是在于可以方便程序的扩展。   

    2.4接口

    接口的声明使用interface,接口只有常量和抽象方法;

    package com.wanczy.oopDemo;
    
    public interface InterfaceDemo01 {
        //常量
        //抽象方法
        public abstract void eat();
        public abstract void run();
    }

    如果说一个抽象类只有抽象方法和常量的话,我们就可以使用接口来表示。接口中没有子类的概念,实现类,实现类通过implements实现接口,必须覆写接口中所有的抽象方法。

    接口的使用规则:

    • 接口中访问权限永远都是public,public可以省列,省列后依然时public
    • 接口中的方法都是抽象方法,可以省列abstract,省列后依然是abstract方法
    • 接口中的常量可以省列final,省列后依然是常量
    • 接口在程序中叫实现,接口必须通过实现类实现,也必须要有实现类,不然接口没有意义
    • 接口本身不能实例化
    • 接口与接口之间可以继承,一个接口可以同时继承多个父接口,子接口中继承了父接口中所有抽象方法和常量
    • 实现类也可以实现多个接口,如果实现的多个接口中,有相同的抽象方法,那么实现类只需要复写一次

    抽象类与接口的区别

     

    抽象类

    接口

    相似

    不能直接实例化,抽象类通过子类实例化,接口通过实现类实例化

    不同

    包含抽象方法、一般方法、变量、长流昂、构造方法

    常量和抽象方法

    抽象类可以实现接口

    接口不继承抽象类

    单继承的局限性

    多继承多实现

    2.7多态

    多态的核心就是子类对象作为父类对象来使用,抽象类的子类对象作为抽象类对象使用,实现类对象作为接口的对象来使用。

    3总结

    理解抽象类和接口的区别

    理解重载和覆写的区别

    熟记继承的特点以及规定(super关键字的使用)

  • 相关阅读:
    博客园第一篇随笔css3动画(奔跑的小杨)
    Python输出菱形
    Android开发经验总结
    Android中Activity共享变量的另一方法:Application context
    system()与execv()函数使用详解
    Sublime Text2 编译和运行C/C++程序(windows)
    Android View.post(Runnable )
    Android图像处理之Bitmap类
    android中dip、dp、px、sp和屏幕密度
    System.setProperty and System.getProperty
  • 原文地址:https://www.cnblogs.com/wusha/p/7157394.html
Copyright © 2020-2023  润新知