zoukankan      html  css  js  c++  java
  • Java基础部分--面向对象基础(1)

    一.类(class)
    1.类是一组具有相同属性和行为的对象的抽象,类的作用是用来创建对象,对象是类的一个实例

    2.把相似的对象划归成一个类

    3.在软件设计中,类,就是一个模板,它定义了通用于一个特定种类的所有对象的属性(变量 静态特征)行为(方法 动态特征)

    类的成员:

      成员变量:[修饰符] 类型 属性名=[默认值]

        方法:[修饰符] 返回值类型 方法名(形参列表){ 语句}

      创建对象:类名 对象名 = new 构造器

    构造器(构造方法/构造器,Constructor)
    1.具有与类相同的名称
    2.不含返回值类型
    3.不能在方法中用return语句返回一个值
    4.一般访问权限为public

    构造器的作用:
    1.完成对象的创建,即完成对象的实例化
    2.一般使用构造器来完成对成员变量的初始化

    默认的构造器:
    1.在Java中,每个类都至少要有一个构造器,如果程序员没有在类里定义构造器,系统会自动为这个类产生一个默认的访问权限为public且参数列表为空的构造器

    2.一旦编程者为该类定义了构造器,系统就不再提供默认的构造

    变量:

    1.局部变量:定义在方法体中的变量;或是方法的形参

          局部变量在栈内保存,栈的存取速度比堆快,效率高。

    2.全局变量:即类的属性

    3.静态变量:在类中声明为static 的属性

    除了8种基本数据类型的变量,其他变量都是引用类型变量

      类 (class)   Person p ;
      接口(interface)    Animal a ;
      数组    int[ ] c ;
    内存的类别:
    栈stack:栈的存取速度比堆快,效率高。在栈内保存基本数据类型的局部变量对象的引用值

    堆heap:堆可以保存那些对空间要求较大的变量。如对象的属性数组的元素

    类和对象的关系

    1.抽象和具体的关系
    2.每一个类在某一时刻都有零个或更多的实例, 类是生成对象的模板
    3. 一个类定义了使用哪些数据来描述属性,每一个对象都有相应的属性值数据,一个类通过一系列方法来定义行为,这些方法能在每个对象中被激活

    二.面向对象主要特征
      I.封装(encapsulation)
    1.所谓封装是把对象的属性和行为结合在一个独立的系统单位内部
    2.尽可能隐蔽对象的内部细节,只向外部提供接口
    3.降低对象间的耦合度
      封装的重要意义:
    1.使对象能够集中而完整地描述并对应一个具体事物
    2.体现了事物的相对独立性,使对象外部不能随意存取对象的内部数据

      II.继承(inheritance)

    1.也称泛化,继承性是子类自动共享父类属性和方法的机制,在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入自己若干新的内容
    2.继承简化了人们对事物的认识和描述,有益于软件复用,是OO技术提高软件开发效率的重要原因之一
    3.是类之间的一种关系,一般类与特殊类之间的关系

    4.子类继承父类的所有属性和方法,同时也可以增加自己的属性和方法

    5.Java中只能单继承,也就是说每个类只能有一个直接父类;一个父类可以有多个子类

    语法规则:

     [修饰符] class 子类名 extends 父类名

      III.多态(polymorphism)

    1.指同一个命名可具有不同的语义
    2.OO方法中,常指在一般类中定义的属性或方法被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为,对于子类,可用不同的方法替代实现父类的服务的方法

    方法的覆盖(override)
     重写(rewrite)
    1.对从父类中继承来的方法进行改造
    2.在子类继承父类时发生
    方法覆盖的规则
    1.在子类中的覆盖方法与父类中被覆盖的方法应具有
    2.相同的方法名
    3.相同的参数列表(参数数量、参数类型、参数顺序都要相同)
    4.相同的返回值类型
    5.子类覆盖方法的访问权限要不小于父类中被覆盖方法的访问权限

     重写(Override) 特点

      1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;

      2、覆盖的方法的返回值必须和被覆盖的方法的返回一致;

      3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;

      4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。

    重载(Overload )特点

      1、在使用重载时只能通过不同的参数样式。例如,不同的参数类型,不同的参数个数,不同的参数顺序(当然,同一方法内的几个参数类型必须不一样,例如可以是fun(int, float), 但是不能为fun(int, int));

      2、不能通过访问权限、返回类型、抛出的异常进行重载;

      3、方法的异常类型和数目不会对重载造成影响;

      4、对于继承来说,如果某一方法在父类中是访问权限是priavte,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。

    •需求:点歌

    Song.java

     1 package diange;
     2 
     3 public class Song {   //歌曲  :模具(所有歌)
     4 
     5        //静态属性
     6      
     7        String  singer="薛之谦";
     8        String   name="丑八怪";
     9        String   lyric="AAAAAAAAA";
    10        double   price=2.00;
    11 
    12        //动态方法动作
    13 
    14 }

    KTV.java

     1 package diange;
     2 
     3 public class KTV {
     4     
     5     
     6       //可存歌曲
     7       public   Song[]   saveSong(){
     8             int    x[]=new int[1000];
     9          
    10             Song   songs[]=new Song[1000];  
    11             return  songs;
    12           
    13       }
    14       
    15       
    16       //向点歌机内添加歌曲
    17       public   void   addSong(String name,double  price  ){
    18           
    19           
    20       }
    21       
    22       //向点歌机内添加歌曲--向数组内赋值
    23       public   void   addSong(Song   s){
    24             
    25             Song  ss[]=saveSong();   //通过方法调用的到数组
    26             for(int i=0;i<ss.length;i++){
    27                 if(ss[i]==null){
    28                     ss[i]=s;   //添加歌曲
    29                     break;
    30                 }else{
    31                     System.out.println("内存已满");
    32                 }
    33                 
    34             }
    35             
    36       }
    37   
    38       //点歌
    39       public   Song   getSong(double   price){
    40             //实例化歌曲对象
    41              Song  s1=new Song();
    42               return   s1; 
    43       }
    44       
    45       //点歌
    46       public   Song   getSong(String  name){
    47           //从数组内取出歌曲
    48           Song   ss[]=saveSong();
    49           for(int i=0;i<ss.length;i++){
    50               if(name==ss[i].name){
    51                   return   ss[i];   
    52               }
    53               
    54           }  
    55           return   null;
    56       }
    57 
    58 }

    User.java

     1 package diange;
     2 
     3 public class User {  
     4     
     5     public   void  buy(){
     6           //调用点歌方法
     7            KTV  k1=new KTV();
     8            k1.getSong("丑八怪");
     9         
    10     }
    11 
    12 }

    •需求: 9*9乘法表

     1     public static void main(String[] args) {
     2         String s[][]=new String[9][];
     3         
     4         for(int i=0;i<s.length;i++){
     5             s[i]=new String [i+1];
     6             for (int j = 0; j < s[i].length; j++) {
     7             
     8                 s[i][j]=(j+1)+"*"+(i+1)+"="+(i+1)*(j+1)+"  ";
     9             }
    10         }
    11         for(int i=0;i<s.length;i++){
    12             for (int j = 0; j < s[i].length; j++) {
    13                 System.out.print(s[i][j]);
    14             }
    15             System.out.println();
    16         }
  • 相关阅读:
    表单的重复提交问题
    js日期操作
    spring data jpa
    Excel Xll开发资料
    Excel DNA学习笔记一
    error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏的解决方案
    点进去勿喷
    hdu1305(字典树)
    2018 Multi-University Training Contest 3
    hihocoder 1014(字典树)
  • 原文地址:https://www.cnblogs.com/Pioneer-HengYu/p/6683282.html
Copyright © 2011-2022 走看看