zoukankan      html  css  js  c++  java
  • "类"的讲稿

    -----------------------面向对象基础------------------------------------
    方法(函数)

    (c#p10为主,p27;javap96)+资料,讲如下问题:
    1、类概念[类、对象]

    2、面向对象基本特征(封装、继承、多态)

    }

    3、类的主要构成(属性和方法)

    4、程序中如何实现类:

    类格式(类头、成员变量、成员方法,实例化)

    例:Person类(姓名,年龄,show_Me)(+set_Me)(+不同文件)
    Person类内存分配
    例5-1 学生类(仅java)
    (c#提一下public)

    小练习:写一个学生类【属性:学号、姓名、专业、入学成绩;方法:修改专业(入学成绩低于300分不允许修改)】,并在主程序中调用它。

    类对象作为方法的形参

    例:人摸动物

    {

    c#代码:

     1 class 动物
     2     {
     3         public string 名字;
     4         public string 叫声;
     5         public void 叫()
     6         {
     7             Console.WriteLine("凶恶的" + 名字 + "在咆哮:" + 叫声 + "~~~~~~~~");
     8         }
     9     }
    10     class11     {
    12         public void 摸动物(动物 x)
    13         {
    14             x.叫();
    15         }
    16     }
    17     class Program
    18     {
    19         static void Main(string[] args)
    20         {
    21             人 张三=new 人();
    22             动物 狗, 机器猫;
    23             狗 = new 动物();
    24             机器猫 = new 动物();
    25             狗.名字 = "旺财";
    26             狗.叫声 = "";
    27             机器猫.名字 = "小叮当";
    28             机器猫.叫声 = "";
    29             张三.摸动物(狗);
    30             张三.摸动物(机器猫);
    31             Console.ReadKey();
    32         }
    33     }

    }

    当类作为方法的形参和返回值时,可以带入/带出多个不同类型的值。注意:它是引用类型。


    战斗程序

    //java(源代码

    //c# 猫狗互咬代码(战斗程序源代码

    变量作用域(c#略,见p76)

    P103直接讲例5-2(仅java)
    重载
    例:两、三个数最大值
    p128,例5-14(仅java,多个数的和)
    构造方法
    介绍构造方法的意义,构造Person
    P108例5-6,知识点:构造重载(长方体,设各边长,算体积)
    掷色子程序(仅C#)
    静态
    { //仅java
    静态方法:P112例5-7

    静态属性:提一下
    看p111-112页,1,2

    注:java里静态内容实际上可以被对象访问,但这不是通用写法,其他语言并不允许。应尽量使用类来访问静态内容。


    //C#
    静态属性+静态方法

    例:

    class Person
        {
            public static int rk = 50;
            public static void war()
            {
                rk--;
            }
    
        }
        class Program
        {
            static void Main(string[] args)
            {
                Person a = new Person();
                /*作为静态属性和方法,人口和战争属于全人类,无法被某个人访问。
                 * 以下两行代码错误
                a.rk = 30;
                a.war();
                */
                Person.rk--;
                Person.war();
                Console.WriteLine(Person.rk);
                Console.ReadKey();
            }
        }

    ---------------面向对象进阶----------------------------

    继承例:球继承圆的半径、面积。代码

    修饰符(JAVA看看视频,17分28秒,C#P12页第三点)
    this和super
    P119例5-9(this),例5-10(主要讲super),例5-11(this和super综合)

    子类对象是可以赋值给父类变量的(例:球对象赋值给圆变量)
    {//仅java
    子类与父类具有同名方法时:默认为方法重写

    例:Person1继承Person类,内存初始化
    简单子类重写父类方法:P129,例5-15
    final修饰方法可阻止重写
    子类重写父类方法:P126例5-13

    {//仅C#

    具有同名方法时内存中的状态:默认为屏蔽

    例:Person1继承Person类,内存初始化
    以圆球为例说明方法的屏蔽与重写

    1、父类授权【可以(virtual),不可以(无,即屏蔽)】
    2、子类是否重写【重写(override),不重写(new)】

    ---------------团队编程内容--------------------------
    抽象类与抽象方法(必须一起用,规定了必须重写方法)

    抽象类不应当直接被实例化。

    一般用于开发小组内部讨论概念的时候,通常作为后续开发的标准和依据。

    {//java
    P124例5-12

    例5-12扩展讲解:

    建抽象类的时候,注意如下图设置(省得手输)

    抽象类“形状”代码:

    public abstract class Shape
    {
    	abstract void getArea();
    }
    

      实现类“圆”代码:

    public class Circle extends Shape
    {
    	double r;
    	Circle(double x)
    	{
    		r=x;
    	}
    	void getArea()
    	{
    		System.out.println("圆形面积是:"+3.14*r*r);
    	}
    }
    

      实现类“矩形”代码:

    public class Rectangle extends Shape
    {
    	double c,k;
    	Rectangle(double x,double y)
    	{
    		c=x;
    		k=y;
    	}
    	void getArea()
    	{
    		System.out.println("矩形面积是:"+c*k);
    	}
    }
    

      main代码:

    public static void main(String[] args)
    	{
    		// TODO Auto-generated method stub
    		Circle cc=new Circle(5.6);
    		Rectangle rt=new Rectangle(8, 6);
    		Shape s;
    		cc.getArea();
    		rt.getArea();
    		s=cc;
    		s.getArea();
    		s=rt;
    		s.getArea();
    	}
    

      对比这个例子和书上的例5-12,看看有什么不同。

      差异最大的是main函数。声明的抽象类变量可以指向任何一个它派生的具体类。道理和继承相同。由此可见抽象类的作用(可用于检验的类设计模版)

    }

    {//c#

    对于任意一个封闭平面图形shape,都应当具有周长和面积两个方法。

    在设计阶段,就有下面的抽象类:

    abstract class shape
        {
            abstract public float L();
            abstract public float S();
        }
    

      具体实现的程序员负责实现这两个方法。

      例如编写“三角形”类的程序员,它的类继承这个抽象类,必须实现这两个方法(不实现会报错)

    class Three:shape
        {
            public int a, b, c;
            public override float L()
            {
                return a + b + c;
            }
            public override float S()
            {
                float s = (a + b + c) / (float)2;
                s =(float) Math.Sqrt(s * (s - a) * (s - b) * (s - c));
                return s;
            }
        }

    主程序中,可以用抽象类表示一切由他派生的平面封闭图形:

    static void Main(string[] args)
            {
                shape a = new Three() { a = 3, b = 4, c = 5 };
                Console.WriteLine($"该图形周长为:{a.L()},面积为:{a.S()}");
            }

    运行效果:

    }
    接口(一般用于项目总体设计时,跨开发小组统一开发标准):

    1. 一般仅用于描述要实现的动作(C#中无字段,可有属性、方法声明,不允许实现,无访问修饰符。属性方法需要具体实现。),以小项目松散耦合为目的,可多继承。
    2. 应尽量避免使用中的接口污染,即接口功能应尽量单一(比如规划“通话”接口时想着手机,规定必须有接打电话和收发短信的功能,这就让写“对讲机”的程序员很难受)。
    3. 用法与抽象类类似(都是相当于模版的东西),注意体会概念和使用场合的区别。

    例:龟车赛跑

  • 相关阅读:
    [k8s]通过svc来访问集群podhttp://api:8080/api/v1/namespaces/default/services/mynginx/proxy/
    redis 常用配置
    mysql 查询重复值命令
    maven3常用命令创建Project
    nginx如何解决超长请求串
    hbase 使用备忘
    Top命令内存占用剖析
    linux 模拟延时和丢包
    hbase命令备忘
    linux grep命令总结
  • 原文地址:https://www.cnblogs.com/wanjinliu/p/11000979.html
Copyright © 2011-2022 走看看