设计模式学习笔记二:面向对象基础二

属性和修饰符
    属性是一个方法或一对方法,但在调用他的代码来看,他就是一个字段,即属性适合于以字段的方式使用方法调用的场合。
    字段是存储类要满足其设计所需要的数据,字段是与类相关的变量。
        
public class Cat
        
{
            
//声明一内部字段,注意是private,默认叫的次数是3

            private int shoutnum = 3;
            
//
ShoutNum属性,注意是public,当中有两个方法
            
//
get表示外界调用是可以得到shoutnum的值
            
//set表示外界可以给内部的shoutnum赋值

            public int ShoutNum
            
{
                
get return shoutnum; }

                
set { shoutnum = value; }
            }

        }
    上面代码中的private 和public都是修饰符。public 表示所修饰的类成员可以允许其他任何类来访问,俗名公有的。private 表示只允许同一个类中的成员访问,其他类包括他的子类无法访问,俗名私有的。如果类中的成员没有加修饰符,则默认为private。通常字段都是private,属性都是public。通常情况下,属性名称首字母大写,而字段则一般是首字母小写或者前面加‘_’。
    属性有两个方法get和set。get访问器返回与声明的属性相同的数据类型,表示的意思是调用是可以得到内部字段的值或者引用;set访问器没有设置参数,用关键词value表示,他的作用是调用属性是可以给内部的字段或引用赋值。
封装
    封装是面向对象的三大特性之一。每个对象都包含他能进行操作所需要的所有信息,这个特性成为封装,因为对象不必依赖其他对象来完成自己的操作。
    封装的好处:良好的封装能减少耦合;类内部的实现可以自由地修改;类具有清晰的对外接口。
继承
    
面向对象的第二大特征就是继承。对象的继承代表了一种‘is-a’的关系,如果两个对象A和B,可以描述为‘B是A’,则表明B可以继承A。猫是哺乳动物,就说明了猫与哺乳动物之间的继承和被继承的关系。继承者可以理解为被继承者的特殊化,因为他除了具备被继承者的特性外,还具备自己独有的个性。继承定义了类如何相互关联,共享特性。继承的工作方式是,定义父类和子类,或叫做基类和派生类,其中子类继承父类的所有的特性。子类不但继承了父类的所有特性,还可以定义新的特性。
    如果子类继承于父类,第一,子类拥有父类非private的属性和功能;第二,子类具有自己的属性和功能,即子类可以扩展父类没有的属性和功能;第三,子类可以以自己的方式实现父类的功能(方法重写)。
    protected表示继承时子类可以对基类有完全访问权。也就是说protected修饰的类成员,对子类公开,但不对其他类公开。
子类继承了父类,则基类拥有了父类的除private外的属性和功能。
    动物基类:
    
public class Animal
        
{
            
protected string name = "";
            
public Animal(string name)
            
{
                
this.name = name;
            }

            
public Animal()
            
{
                
this.name = "无名";
            }

            
protected int shoutNum = 3;

            
public int ShoutNum
            
{
                
get return shoutNum; }
                
set { shoutNum = value; }
            }

        }
猫子类:
public class Cat : Animal
        
{
            
public Cat()
                : 
base()
            
{ }

            
public Cat(string name)
                : 
base(name)
            
{ }
            
public string Shout()
            
{
                
string result = "";
                
for (int i = 0; i < shoutNum; i++)
                
{
                    result 
= result + "嘧,";
                }

                
return "我的名字叫" + name + " " + result; 

            }

        }
狗子类:
public class Dog : Animal
        
{
            
public Dog()
                : 
base()
            
{ }

            
public Dog(string name)
                : 
base(name)
            
{ }
            
public string Shout()
            
{
                
string result = "";
                
for (int i = 0; i < shoutNum; i++)
                
{
                    result 
= result + "汪,";
                }

                
return "我的名字叫" + name + " " + result; 

            }

        }

    子类从他的父类中继承的成员有方法、域、属性、事件、索引指示器,但对于构造方法,他不能被继承,只能被调用。对于调用父类的成员,可以用base关键词。
    
继承的优点是:继承是所有子类公共部分都放在了父类,使得代码得到共享,这就避免了重复,另外,继承可使得修改和扩展继承而来的实现都比较容易。
    继承的缺点是:当父类变,则子类不得不变。继承会破坏包装,父类实现细节暴露给了子类。
posted @ 2008-05-31 09:53  peida  阅读(1739)  评论(1编辑  收藏  举报