• Java-----面向对象的三个特征


    面向对象的三个特征是:封装、继承、多态

    一、封装

      【对属性的封装】

        封装的目的:只能通过规定的方法访问数据,防止不合法的输入

        1.将属性进行私有化处理,不允许外部程序直接访问,并且对外提供统一的方法来设置和读取私有属性

        2.实现访问控制,限制属性访问

     1 public  class  Test{
     2   //私有化处理
     3   private String name;
     4   private String sex;
     5   private int age;
     6 
     7   //空参构造与全参构造
     8   public A() {
     9     super();
    10   }
    11   public A(String name, String sex, int age) {
    12     super();
    13     this.name = name;
    14     this.sex = sex;
    15     this.age = age;
    16   }
    17 
    18 //设置get、set方法
    19   public String getName() {
    20     return name;
    21   }
    22   public void setName(String name) {
    23     this.name = name;
    24   }
    25   public String getSex() {
    26 
    27     return sex;
    28   }
    29   public void setSex(String sex) {//对输入进行控制
    30     if(sex=="男"){
    31         this.sex = sex;
    32     }else if(sex=="女"){
    33         this.sex = sex;
    34     }else{
    35         System.out.println("输入不合法");
    36         this.sex="男";
    37     }
    38   }
    39   public int getAge() {
    40     return age;
    41   }
    42   public void setAge(int age) {
    43     if(age>0&&age<100){
    44         this.age=age;
    45     }else{
    46         System.out.println("年龄不合法");
    47         this.age=-1;
    48     }
    49   }
    50 //方法
    51   public void intro(){
    52     System.out.println("我是"+this.name+",我是"+this.sex+"生, 
    53   我"+this.age+"岁");
    54   }
    55 
    56 } 

    重载:与返回值类型,访问修饰符无关

    特点:方法名相同,参数列表不同(参数个数、参数类型,参数的前后顺序)

    典型:空参构造和全参构造

      

    二、继承:优化代码的一种思路

    用 extends 关键字

    父类
    
    public class Fruit {
        private double weight;
        
        public Fruit(double weight) {
            super();
            this.weight = weight;
        }
    
        public void intro(){
            System.out.println("我是水果,"+weight+"克");
        }
    
    }
    子类
    
    public class Apple extends Fruit{
    
        public Apple(double weight) {
            super(weight);
            // TODO Auto-generated constructor stub
        }
        
    
    }

    子类访问父类成员,使用super关键字,但是仍不能访问父类私有的属性和方法

    重写

    特点:在子类中,重写方法要求方法名相同、参数列表相同、返回值相同、访问控制符不能比父类更加严格

    重写和重载的区别:http://www.cnblogs.com/1960366876tZ/p/8685965.html

    抽象类:用abstract修饰的类   

    特点:不能被实例化

    抽象方法:用abstract修饰,并且没有方法体

    子类要继承抽象类,必须要重写父类所有的抽象方法,除非子类也是抽象类

    抽象方法必须要写在抽象类中

    final关键字

    1.final修饰的类为最终类,不能被继承

    2.final修饰的方法为最终方法,不能被重写

    3.final修饰的变量为常量,不可被修改 

    static关键字:可以用来修饰属性、方法、代码块

    1.用static修饰的方法和属性为静态方法和静态属性,调用时使用类名直接调用即可

    2.静态方法和静态属性也叫类方法和类属性,在类装载的时候就直接声明,

      因此,静态方法中不能调用非静态属性和方法(这个时候还没有对象 ,自然也就没有成员属性和方法)

      所以也不能使用this 和 super  

    3.由于类属性和类方法时属于类的所以类装载的时候只会产生一份,后续使用该类实例化的多个对象都将共用这一个静态变量

    三、多态

    程序中的多态是指,同一个引用类型 ,由于使用不同的对象实例,而执行不同的操作

    实现多态的条件:

    1.子类继承父类

    2.子类重写父类的方法

    3.父类引用指向子类

    public abstract class Instrument {
        
        private String brand;
        private double weight;
        public Instrument(String brand, double weight) {
            super();
            this.brand = brand;
            this.weight = weight;
        }
        public Instrument() {
            super();
        }
        
        public String getBrand() {
            return brand;
        }
        public void setBrand(String brand) {
            this.brand = brand;
        }
        public double getWeight() {
            return weight;
        }
        public void setWeight(double weight) {
            this.weight = weight;
        }
        
        //抽象方法
        public abstract  void play();
    
    }
    //子类1
        private double size;
        public Piano(){
            
        }
        public Piano(double size) {
            super();
            this.size = size;
        }
    
    
        public double getSize() {
            return size;
        }
    
        public void setSize(double size) {
            this.size = size;
        }
        
        public void play(){
            System.out.println("演奏钢琴");
        }
    
    }
    //子类2
    public class Violin extends Instrument {
    
        private double length;
        public Violin(){
            
        }
            public Violin(double length){
                   super();
                   this.length=length;
            
        }
        public double getLength() {
            return length;
        }
        public void setLength(double length) {
            this.length = length;
        }
        public void play(){
            System.out.println("演奏小提琴");
        }
        
    }
    public class Artist{
        public void make(Instrument i){
            i.play();
        }
    }
    //测试类
    public class Test {
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Artist a=new Artist();
                
            //声明的是父类,指向的是子类的一个对象    
            Instrument i=new Piano();
            a.make(i);
        }
    
    }
  • 相关阅读:
    INT 3 中断调试处理流程
    调试事件的处理结束
    [IDA] 自动下载符号
    06 内存断点
    05 软件断点
    C#2.0新增功能02 泛型
    C#2.0新增功能01 分部类与分部方法
    xBIM 实战04 在WinForm窗体中实现IFC模型的加载与浏览
    xBIM 实战03 使用WPF技术实现IFC模型的加载与浏览
    xBIM 实战02 在浏览器中加载IFC模型文件并设置特效
  • 原文地址:https://www.cnblogs.com/1960366876tZ/p/8747985.html
Copyright © 2020-2023  润新知