当前位置:编程学习 > 网站相关 >>

Ruby on Rails 入门之:(14) Ruby中的继承

Ruby中使用 < 集成一个父类

 

 

[ruby]
#encoding:gbk  
 
class Father 
    def show 
        puts "hello father"; 
    end 
end 
 
class Son < Father 
    def sayHi 
        puts "hi, son"; 
    end 
end 
 
s = Son.new; 
s.show; 
s.sayHi; 

#encoding:gbk

class Father
 def show
  puts "hello father";
 end
end

class Son < Father
 def sayHi
  puts "hi, son";
 end
end

s = Son.new;
s.show;
s.sayHi;
输出的结果为:

 

 

[html]
watkins@watkins:~/temp/workspace/ruby$ ruby inherit.rb  
hello father 
hi, son 
watkins@watkins:~/temp/workspace/ruby$  

watkins@watkins:~/temp/workspace/ruby$ ruby inherit.rb
hello father
hi, son
watkins@watkins:~/temp/workspace/ruby$

父类中的方法一样可以在子类中像实例变量一样直接使用。

 


如果父类存在有参数的构造方法,那么子类不能直接自动的调用父类的构造方法,需要使用super()来显示的调用父类的构造函数。

同时,基类中存在的实例变量也会被继承到派生类。

 


在派生类中可以重写父类的方法,只写写函数就可以了。

 


关于Ruby的继承机制,不必讨论太多,几乎所有的编程语言的继承机制都差不多。

 


然后比较重要的就是函数的访问权限,比如公有函数,收保护的函数,私有函数的声明。

 


Ruby提供了访问作用域的机制,可以简单的控制类内成员的访问权限。

 


Ruby提供了三个级别的支持:

private: 私有的方法,可以在类的内部被访问。派生类不可以访问

public: 共有的方法,也是方法 默认的类型。

protected: 受保护的方法,可以被派生类访问。

 


可以在每个函数前声明控制方法:

 

 

[ruby]
#encoding:gbk  
 
class Father 
    def show 
        puts "hello father"; 
    end 
end 
 
class Son < Father 
    private  
    def sayHi 
        puts "hi, son"; 
    end 
 
    public  
    def aaa 
        #  
    end 
 
    protected 
    def bbb 
        ##  
    end 
end 
 
s = Son.new; 
s.show; 
s.sayHi; 

#encoding:gbk

class Father
 def show
  puts "hello father";
 end
end

class Son < Father
 private
 def sayHi
  puts "hi, son";
 end

 public
 def aaa
  #
 end

 protected
 def bbb
  ##
 end
end

s = Son.new;
s.show;
s.sayHi;
还可以使用另外一种方式设置访问级别:

 

 

[ruby]
#encoding:gbk  
 
class Father 
    def show 
        puts "hello father"; 
    end 
 
    def aaa 
        #  
    end 
 
    def bb  
        #  
    end 
 
    private(:show); 
    protected(:aaa, :bb); 
end 
 
class Son < Father 
    private  
    def sayHi 
        puts "hi, son"; 
    end 
 
    public  
    def aaa 
        #  
    end 
 
    protected 
    def bbb 
        ##  
    end 
end 
 
s = Son.new; 
s.show; 
s.sayHi; 

#encoding:gbk

class Father
 def show
  puts "hello father";
 end

 def aaa
  #
 end

    def bb
  #
 end

 private(:show);
 protected(:aaa, :bb);
end

class Son < Father
 private
 def sayHi
  puts "hi, son";
 end

 public
 def aaa
  #
 end

 protected
 def bbb
  ##
 end
end

s = Son.new;
s.show;
s.sayHi;
[ruby]
private(:show); 
protected(:aaa, :bb); 


 private(:show);
 protected(:aaa, :bb);使用上面的代码定义函数的访问级别。不过这里要使用函数的符号变量形式,符号变量即变量在语言内部的表示。

 


 

补充:Web开发 , 其他 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,