黑马程序员--面向对象

来源:互联网 发布:手写笔绘画软件 编辑:程序博客网 时间:2024/06/06 17:45

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

 

1. 面向对象的概念 :
面向对象是一种思想,相对于面向过程注重行为功能,面向对象把对象作为主体,通过调用对象的方法来完成相应的功能。在面向对象的世界里,万物皆对象,而对象就有相应的属性和功能,我们通过对这个世界事物的抽取,归纳,总结,能够更加高效的处理不同的事物。

 

2. 特点
是一种符合人们思考习惯的思想,可以将复杂的事情简单化,将程序员从执行者转换成了指挥者。
完成需求时:
1. 先要去找具有所需功能的对象来用。
2. 如果该对象不存在,那么创建一个具有所需功能的对象。
这样可以简化开发并提高复用。

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

封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。

好处:
1. 将变化隔离。
2. 便于使用。
3. 提高重用性。
4. 提高安全性。


函数的封装:
就用private进行私有,私有是封装里面的一种表现形式。

封装是指隐藏对象的属性和实现细节,一旦私有了就在类外,你是不能访问,只能提供公共访问方式。

关于函数的继承;
继承的使用:1、是为了提高代码的复用性。2、让类与类之间产生关系,有了这个关系,才有了多态的特性。

在java语言中,java只支持单继承,不支持多继承,在C语言中就支持多继承。
java支持多层继承,也就是一个继承体系。
当你在用继承做题的时候,简单的一句话:先查阅父类的功能,在创建于子类对象的使用。

下面以继承为例子
需求1:老的手机显示的时候是名字,现在新手机显示是名字和音乐。
需求2:以前用名字显示出来,现在我想让它显示出family和音乐。
需求3:定义一个变量,把新的手机里面的变量引用到老的手机。

需求1
class Tel
{
void show()
{
 System.out.println("name");

}

}

class NewTel

{
void show()

{
System.out.println("name");//也可以用另一种方式表示:super.show();
System.out.println("music");

}
}

class Shouji

{

 public static void main(String[] args)

{
      NewTel c=new NewTel();
      c.show()
}

}

需求2


class Tel
{
void show()
{
 System.out.println("name");

}

}

class NewTel

{
public void show()

{
System.out.println("family");
System.out.println("music");

}
}

class Shouji

{

 public static void main(String[] args)

{
      NewTel c=new NewTel();
      c.show()
}

 

}


需求3
class Tel
{
int num=4;
void show()

{
 System.out.println("name");

}

}

class NewTel extends Tel  //extends 表示继承的意思

{
 int num=8;
 public void show()   //public 属于权限最大的一个


{
System.out.println("family");     //把上面的“name” 改为 “family”
System.out.println(super.num);    //super.num 代表的是父类的引用,this.num 代表的是本类对象的引用
System.out.println("music");

}


}

class Shouji

{

 public static void main(String[] args)

{
      NewTel c=new NewTel();
      c.show();
}

 

}

1.多态的体现


     父类的引用指向了自己的子类对象


     父类的引用也可以接收自己的子类对象    


2.多态的前提


     必须是类与类之间有关系,要么继承,要么实现


     通常还有一个前提,存在覆盖


3.多态的好处


     多态的先大大的提高了代码的扩展性


4.多态的弊端


     提高了扩展性,但是只能使用父类的引用访问父类中的成员


 


通过继承实现多态




[java] view plaincopyprint?class Animal  
{  
    void eat()  
    {  
        System.out.println("Animal eat");  
    }  
}  
class Cat extends Animal  
{  
    void eat()//覆盖父类方法   
    {  
        System.out.println("Cat eat");  
    }  
    void catchMouse()//特有方法   
    {  
        System.out.println("Cat catchMouse");  
    }  
}  
class DuoTaiDemo  
{  
    public static void main(String[] args)  
    {  
        Animal a=new Cat();//类型提升,向上转型。(byte b=2,int x=b,b转为int型)   
        a.eat();  
        //如果想要调用猫的特有方法时,如何操作?   
        //强制将父类的引用转成子类类型,向下转型。   
        Cat c=(Cat)a;//向下转型。   
        c.catchMouse();  
        //千万不要出现这样的操作,就是将父类对象转成子类类型。   
        //我们能转换的是父类引用指向了自己的子类对象时,该引用可以被提升,也可以被强制转换。   
        //多态自始至终都是子类对象在做着变化。   
        //Animal a=new Animal();   
        //Cat c=(Cat)a;不行,动物不能转成猫   
        //对象多态的实现自始至终都是子类对象在变化   
        //Animal a=new Animal();这里的a是自己的对象   
        //Animal a=new Cat();这里的a是子类的引用   
    }  
}  


class Animal
{
void eat()
{
System.out.println("Animal eat");
}
}
class Cat extends Animal
{
void eat()//覆盖父类方法
{
System.out.println("Cat eat");
}
void catchMouse()//特有方法
{
System.out.println("Cat catchMouse");
}
}
class DuoTaiDemo
{
    public static void main(String[] args)
    {
        Animal a=new Cat();//类型提升,向上转型。(byte b=2,int x=b,b转为int型)
        a.eat();
        //如果想要调用猫的特有方法时,如何操作?
        //强制将父类的引用转成子类类型,向下转型。
        Cat c=(Cat)a;//向下转型。
        c.catchMouse();
        //千万不要出现这样的操作,就是将父类对象转成子类类型。
        //我们能转换的是父类引用指向了自己的子类对象时,该引用可以被提升,也可以被强制转换。
        //多态自始至终都是子类对象在做着变化。
//Animal a=new Animal();
//Cat c=(Cat)a;不行,动物不能转成猫
        //对象多态的实现自始至终都是子类对象在变化
        //Animal a=new Animal();这里的a是自己的对象
        //Animal a=new Cat();这里的a是子类的引用
    }
}


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

 

 

0 0
原创粉丝点击