访问修饰符、封装、继承

一、访问修饰符:
1、pubulc:公共的,只要引用了命名空间,就可以随意进行访问     *常用

2、private:私有的,只有当前类内部才可以访问        *常用

3、internal:内部的,当前程序集内可以访问,程序集就是命名空间,此修饰符是默认的

4、protected:被保护的,当前类和它的子类才可以访问

二、命名空间:

也叫程序集,项目中每一个文件夹都是一个独立的命名空间

如果要使用某一个命名空间下的类文件,那么必须首先引用此命名空间

三、封装

打包,封起来,保护起来

public int Ids - 属性,封装基本结构
{
      get{ return _Ids; }
      set{ _Ids = value; }
}

private int _Ids;   - 私有的成员变量

四、一个成员变量可以有很多个属性

属性返回类型可以是任意类型,不是必须要与成员变量类型相同

属性可以是只读的,也可以是只写的,也可以两者都有

public int Ids - -只读
{
      get{ return _Ids; }
}

public int Ids - -只写
{
      set{ _Ids = value; }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1.App_Code
{
    public class Student
    {
        //封装id
        private int _id;
        public int id
        {
            get { return _id; }
            set { _id = value; }
        }

        //封装学号
        private string _code; //成员变量
        public string code  //一个成员变量可以有好多个属性
        {
            get { return _code; }   //通过属性,获取,读取
            set { _code = value; }//写入,判断条件要在set里面进行
        }

        //封装姓名
        private string _name;
        public string name
        {
            get { return _name; }
            set { _name = value; }
        }

        //封装生日
        private DateTime _brithday;
        public DateTime brithday
        {
            get { return _brithday; }
            set { _brithday = value; }
        }
        public string sbrithday
        {
            get { return _brithday.ToString("yyyy年MM月dd日"); }//只读取,把生日转换成"yyyy年MM月dd日"这种格式。
        }

        //封装学号
        private decimal _score;
        public decimal score
        {
            get { return _score; }
            set { _score = value; }
        }

    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
using ConsoleApplication1.App_Code;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            ArrayList al = new ArrayList();
            Console.Write("请输入学生人数:");
            int n = Convert.ToInt32(Console.ReadLine());
            //1.输入学生信息
            for (int i = 0; i < n; i++)
            {
                Student st = new Student();
                //序号
                st.id = i + 1;
                //输入学号
                while (true)
                {
                    Console.Write("请输入第" + (i + 1) + "个人的学号:");
                    st.code = Console.ReadLine();
                    if (st.code != "")
                    {
                        break;
                    }
                    else
                    {
                        Console.WriteLine("您输入的学生编号有误,请重新输入!");
                    }
                }
                //输入姓名
                while (true)
                {
                    Console.Write("请输入第" + (i + 1) + "个人的姓名:");
                    st.name = Console.ReadLine();
                    if (st.name != "")
                    {
                        break;
                    }
                    else
                    {
                        Console.WriteLine("姓名不能为空,请重新输入!");
                    }
                }
                //输入成绩
                while (true)
                {
                    Console.Write("请输入第" + (i + 1) + "个人的成绩:");
                    st.score =Convert.ToDecimal(Console.ReadLine());
                    if (st.score >= 0 && st.score <= 100)
                    {
                        break;
                    }
                    else
                    {
                        Console.WriteLine("成绩必须在0~100之间!");
                    }
                }
                al.Add(st);
                Console.WriteLine("------------------------------");
            }
            //2.排序,冒泡法
            for (int i = 0; i < n - 1; i++)
            {
                for (int j = i + 1; j < n; j++)
                {
                    Student st1 = (Student)al[i];
                    Student st2 = (Student)al[j];
                    if (st1.score < st2.score)
                    {
                        object zhong = al[i];
                        al[i] = al[j];
                        al[j] = zhong;
                    }
                }
            }
            //3.输出学生信息
            Console.WriteLine("===============学生信息===============");
            Console.WriteLine("序号" + "\t" + "学号" + "\t" + "姓名" + "\t" + "成绩");
            for (int i=0;i<n;i++)
            {
                Student st3=(Student)al[i];
                Console.WriteLine(st3.id+"\t"+st3.code+"\t"+st3.name+"\t"+st3.score);
            }

            Console.ReadLine();
        }
    }
}

学号、姓名不能为空,成绩要在0~100之间,如果输入错误会一直循环输入,直到输入正确

五、继承

1、子类可以继承父类所有的public方法和属性

父类不可以调用子类的方法和属性,哪怕是public的

2、子类可以转换成父类,转换成的这个父类也可以转换回相应子类

子类转换成父类,这个父类不可以转换成其它的子类

3、父类----就是成为父类

子类----又称为某个类的子类,派生类,超类

Plane这个类是Fly的派生类,
     Plane这个类派生自Fly

类using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    public class Fly
    {
        public string Fly1()
        {
            return "我可以飞行!";
        }

        //private //这个是父类Fly私有的,子类不可以继承,只可以继承公共的

    }
}
类using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    public  class Bird : Fly  //需要Bird这个类继承Fly里面的东西,那就在Bird后面加上英文状态下的“:”,在加上Fly
    {
        public string name()
        {
            return "我叫小鸟!";
        }

    }
}
类using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    public class Plan:Fly
    {
        public string name()
        {
            return "我叫飞机!";
        }
    }
}
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            //第一个
            Fly f = new Fly();//实例化
            string s = f.Fly1();
            Console.WriteLine(s);

            //第二个
            Bird b = new Bird();//先实例化这个类
            //Bird这个类里面什么都不写的话,完全继承Fly这个父类里的东西,
            //所以,Bird也可以点出Fly1这个方法
            string bb = b.Fly1();
            Console.WriteLine(bb);

            //第三个
            Plan p = new Plan();//实例化
            Console.WriteLine(p.Fly1());

            //第四个
            Bird bbb = new Bird();
            bbb.name();//没有强转成父类时有name这个方法
            Fly fff = (Fly)bbb;//把子类强转成父类,子类里面的所有方法都不能用,那是子类特有的,父类不可以用
            Console.WriteLine(fff.Fly1());

            //第五个
            Bird b1 = (Bird)fff;//新建一个b1的Bird类,把转成的父类fff转回到相应的Bird子类
            Console.WriteLine(b1.name());//转换回来的b1下面有name这个方法

            //第六个
            Plan pp = (Plan)fff;//报错:无法将类型为“ConsoleApplication2.Bird”的对象强制转换为类型“ConsoleApplication2.Plan”。
            Console.WriteLine(pp.name());
            //父类与子类的转换是两者之间的转换,子类与子类之间不能进行转换,
            //Bird强转为父类,这个父类不可以再转为其他子类,如果转换牵扯到Plan与Bird之间的转换
            //即子类与子类的转换,程序不允许所以报错,但是在代码中不显示语法错误

            Console.ReadLine();
        }
    }
}

第一个                                                         第二个                                                       第三个

第四个(把父类转换为子类)                                    第五个(转换成的这个父类也可以转换回相应子类)

第六个(子类转换成父类,这个父类不可以转换成其它的子类)

时间: 2024-10-30 03:25:48

访问修饰符、封装、继承的相关文章

【2017-4-14】访问修饰符 封装 继承 多态

1.命名空间/程序集 2.访问修饰符public 公共的 - 访问权限是最高的private 私有的 - 只能在类的内部进行访问 internal 默认的 - 当前命名空间(程序集)下可以访问protected 被保护的 - 当前类及它的派生类中可以访问 3.封装private 数据类型 _名称; //成员变量,字段public 数据类型 名称 //属性{ get{ return _名称; } set{ _名称 = value; }} 还可以有方法 //成员方法 4.继承: 子类:父类一个子类只

访问修饰符和继承

访问修饰符: 访问修饰符是对于跨类访问的一个权限限制 public : 公共的,引用命名空间即可随意访问,最高访问权限.private : 私有的,只有在声明它的类和结构中才可以访问,访问权限最低. Internal : 内部的,同一个程序集中所有的类都可以访问,程序集就是命名空间.Protected : 受保护的,只能在他自己和自己的子类中才能访问. 继承: 父类有且允许子类继承的东西子类都会有,一个父类可以有多个子类,一个子类只能有一个父类. class Bird : Fly//前面是子类,

【2017-04-14】命名空间、访问修饰符、封装、继承、多态

一.命名空间 namespace 命名空间名称 如果命名空间一致,才能在他下面访问那些不同的类,如果不一致是没有办法直接访问的. 不同命名空间下都是public访问修饰符,想要调用,得在using处引用命名空间 using .... 是引用的命名空间 二.访问修饰符(写在命名任何东西的最前面) public    公共的,访问权限最高 private    私有的,访问权限最低,只能在类的内部进行访问 protected   被保护的,当前类及他的派生类中进行访问 internal    默认的

面向对象的过程、继承、封装、多态;抽象类、访问修饰符的使用、引用类型强制转换、方法重写@override与重载、空指针异常、super关键字

面向对象设计的过程:     发现类-发现类的属性-发现类的方法-优化设计: 封装: private类型的,只可以在本类中使用,当其他类调用此类时,不可使用,因此可以设置setget方法,如下所示: 构造------------------------ 默认有无参构造,若设置了有参构造,则就没有默认的无参构造了,需要自己再添加一个 方法重载------------------- 方法名相同,参数列表不同(类型,数量,顺序不同,与参数名无关): 与返回值,访问修饰符无关 面向对象(OO)的优点--

访问修饰符,封装,继承

一.封装: 封装是实现面向对象程序设计的第一步,封装就是将数据或函数等集合在一个个的单元中(我们称之为类).被封装的对象通常被称为抽象数据类型. 封装的意义: 封装的意义在于保护或者防止代码(数据)被我们无意中破坏.在面向对象程序设计中数据被看作是一个中心的元素并且和使用它的函数结合的很密切,从而保护它不被其它的函数意外的修改. 封装提供了一个有效的途径来保护数据不被意外的破坏.相比我们将数据(用域来实现)在程序中定义为公用的(public)我们将它们(fields)定义为私有的(privat)

面向对象3大特性:封装、继承、多态——封装(this 、访问修饰符、内部类)

封装的概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问.而是通过该类提供的方法来实现对隐藏信息的操作和访问 封装的好处: a.只能通过规定的方法访问数据 b.隐藏类的细节,方便修改和实现 封装的实现步骤: 1.修改属性的可见性--设为private 2.创建getter/setter方法--用于属性的读写 3.在getter/setter方法中进入属性控制语句--对属性值的合法性进行判断 public class TelPhone { //定义成员变量 private float sc

20151024_004_C#基础知识(C#中的访问修饰符,继承,new关键字,里氏转换,is 和 as,多态,序列化与反序列化)

1:C#中的访问修饰符 public: 公共成员,完全公开,没有访问限制. private: 私有的,只能在当前类的内部访问. protected: 受保护的,只能在当前类的内部以及该类的子类中访问. internal: 只能在当前项目中访问,在同一个项目中,internal和public的权限是一样的. protected internal: protected + internal权限. 1.1:能够修饰类的访问修饰符只有两个: public / internal 1.2:接口中的成员不允许

C# 封装的访问修饰符

封装 被定义为"把一个或多个项目封闭在一个物理的或者逻辑的包中".在面向对象程序设计方法论中,封装是为了防止对实现细节的访问. 抽象和封装是面向对象程序设计的相关特性.抽象允许相关信息可视化,封装则使开发者实现所需级别的抽象. C# 封装根据具体的需要,设置使用者的访问权限,并通过 访问修饰符 来实现. 一个 访问修饰符 定义了一个类成员的范围和可见性.C# 支持的访问修饰符如下所示: Public:所有对象都可以访问: Private:对象本身在对象内部可以访问: Protected

二、Java面向对象(7)_封装思想——访问修饰符

2018-04-30 访问修饰符 <访问权限范围越小,安全性越高> public:表示全局的,可以在当前项目中任何地方访问 如果几个相互访问的public类分布在不用的包中,则需要导入相应public类所在的包.由于类的继承性,类所有的公有方法和变量都能被其子类继承. Java程序的main() 方法必须设置成公有的,否则,Java解释器将不能运行该类. protected:能被同一个包中的任何其他类访问,也能够被不同包中的子类访问. (protected访问修饰符不能修饰类和接口,方法和成员