黑马程序员_java_07_java面向对象

------Java培训、Android培训、iOS培训、.Net培训、期待与您交

Java面向对象

在java程序语言设计中任何事物都可以定义为一个对象。任何一个事物都可以定义为一个类。

Java程序语言面向对象主要特征:

封装

Java语言程序设计可以把程序执行过程和数据包围起来组成一个类,通过类之间的关系在程序中结合起来共同组成程序。

1.访问修饰符

 类中的方法和属性通过访问修饰符控制它们的作用域:

Public:

  该修饰符可以作用与属性、方法上面;被public修饰的属性和方法表示该方法是公用的可以被子类对象、本类对象访问。

Protected

 该修饰符可以作用与属性、方法上;被protected修饰的属性和方法可以被子类对象本类对象、和同一包中的类访问,如果不再同一个包中访问则必须是该类的子类。

Private

 该修饰符可以作用与属性、方法上;被private修饰的属性和方法可以被本类对象访问,其他类不能访问,如需修改获取该修饰符修饰的属性和方法则可以通过get()和set()方法访问。

Friendly

该修饰可以作用与类的属性、方法上;被friendly修饰的属性方法可以被子类对象和本类对象和同一个包中的类访问。但是不同包中的类无法访问及时是该类的子类也不可以被访问。

Static

 该修饰符可以作用于类的属性、方法上;被static修饰的属性和方法为静态属性和方法、在对象初始化之前初始化,普通方法可以访问到被static修饰的属性和方法,但是static类型的方法不可以访问到普通的方法。使用类名即可调用该类型的方法;

单例模式:

  假如需要控制一个类只能有一个实例对象即可使用该修饰符修饰方法,返回本类的对象。

使用单利模式步骤:

 1.私有化构造方法。

 2.创建静态类对象。

 3.创建方法返回对象。

代码实例:

class Text{
        /**
         *饿汉式单利模式;
         *在类初始化时就创建对象。
         *优点:没有加锁,执行效率会提高。
      * 缺点:类加载时就初始化,浪费内存。
        */
       private final static Text text=newText();
        public static TextGetNewText(){
               return text;
        }
       privateText(){
             
       }
      
       /**
        * 懒汉式单利模式
        * 在第一次调用该方法时创建实例对象。
        * 优点:第一次调用该方法时创建对象,避免了内存浪费。
        * 缺点:该方法存在线程安全隐患,必须加上同步锁,执行效率低。
        */
       private static Text text1=null;
       public static synchronized TextGetNextText1(){
              if(text1 !=null){
                     text1=newText();
              }
              return text1;
       }


Final

该关键字可以修饰类中的属性和方法,当类中的属性被该关键字修饰时在创建该属性时必须给定初始值该值不可以被改变。当类中的方法被该关键字修饰时该方法不可以被子类中的方法覆盖。

abstract

 该关键字可以修饰类和类中的方法。当类被该修饰符修饰的时候该类就为抽象类,不能被实例化只能被继承。该类可以定义普通方法,及静态方法,普通成员变量,静态成员变量。

当类中的方法被该修饰符修饰的时候该方法只能有方法头不能有方法体。该方法只能被继承。并且该方法所在的类必须为抽象类。

当子类继承该类的时候必须实现该类中的抽象方法。

Interface

该关键字只能修饰类上,当类被该关键字修饰的时候该类就变成了接口。

1.接口只能用于被实现(通过implements关键字)不能创建实例对象

2.接口内部的属性在定义时必须初始化。

3.接口内部的方法只能有方法名不能有方法体。

4.接口可以继承接口和实现接口。

继承

Java成语语言设计中的继承是描述类与类之间的一种合作定义使用关系。

实现继承的步骤:

1.定义父类

2.定义子类使用extends关键字继承父类。

继承的特点:

子类可以拥有父类中的所有public、Protected修饰符修饰的数据及方法。

1.方法的覆盖

   方法的覆盖基于继承关系,当父类中定义了一个方法时,子类中由重新定义了该方法则这种实现方式为覆盖。

覆盖方法的条件:

1.覆盖方法的方法签名(方法名,参数,返回类型)必须与被覆盖方法的方法签名相同 
2.  覆盖方法的访问级别不能比被覆盖方法访问级别低 
3.  覆盖方法不能比它所覆盖的方法抛出更多的异常。

2、方法的重载

方法的重载可以不基与继承关系。当在同一个类中定义了一个相同名称的的方法但方法参数不同的方法叫做方法的重载。

重载方法的条件:

1.  不同的参数个数 
2.  不同的参数类型 
3.  不同的参数顺序 

方法的重载与返回值及方法的访问类型修饰符没有关系。

Java 中继承的好处

1.在java程序设计中使用继承可以在不改变原先程序设计的基础上很好的改变方法实现方式。

2.通过向下转型(父类转化为子类)可以更好的扩充类的加载不定性。

多态

多态的概念:

在java程序语言中在运行时可以根据不同的对象做出不同的反映。

例如:

一个父亲类中有三个儿子类,三个儿子各自有各自的特殊本领。

大儿子的特殊本领为打老虎。

二儿子的特殊本类为打狮子。

三儿子的特殊本类为打豹子。

在父亲与到动物袭击的时候可以根据动物的类型来选择用那个儿子来抵御动物。

实例代码:

packagecom.text;
 
importjava.io.BufferedReader;
importjava.io.InputStreamReader;
 
public class Fqin {
 
       /**
        * @param args
        */
       public static voidmain(String[] args) throws Exception {
              // TODOAuto-generated method stub
 
              BufferedReader bfr=newBufferedReader(new InputStreamReader(System.in));
              String line="";
              Fqin fuqin=null;
              while((line=bfr.readLine())!=null){
                    
                     if(line.equals("老虎")){
                            fuqin=newDerzi();
                     }else if(line.equals("狮子")){
                            fuqin=newEerzi();
                     }else if(line.equals("豹子")){
                            fuqin=newSerzi();
                     }else if(line.equals("不打了"))
                     {
                            return;
                     }
                     fuqin.Da();
              }
       }
       public void  Da(){
             
       }
}
 
class Derzi extends Fqin{
      
public void  Da(){
              System.out.println("大儿子打老虎!!");
       }
}
class Eerzi extends Fqin{
public void  Da(){
       System.out.println("二儿子打狮子!!");
       }
}
class Serzi extends Fqin{
public void  Da(){
       System.out.println("三儿子打豹子!!");
       }
}


运行界面如下图所示:


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值