zoukankan      html  css  js  c++  java
  • 面向对象(class0420)

    测试

    交换两个变量的值

    int num1 = 5;int num2=6;

    通过程序交换让num1 = 6,num2=5;

    求两个数的最大值 (求三个数最大值)

    求1-100之间所有奇数的和

    找胖子,{200,120,90,180,110},找最胖的人

    创建一个Person类,属性(姓名,性别,年龄),方法SayHi() 。

    创建一个Employee类继承Person类,特有属性Salary

    面向对象

    什么是面向对象

    ---万物皆对象 一切事物都是对象

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

    类和对象的区别

    类是模具,创建对象的模具,抽象的

    类是一种数据类型,用户自定义的数据类型

    对象是具体的,是类的具体实例。

    对象具有属性(特征) 名词和方法(行为) 动词

    例:人、汽车、手机都是类,都代表一类事物,每一类事物都有特定的行为 张三,你家门口的那辆汽车,我手里的手机都是对象,都是具体的某一件 在类中,用数据表示事物的状态,用函数实现事物的行为)

    变量作用域

    变量作用域

    成员变量—直接属于某个类,作用域在该类内部

    局部变量

    —声明该变量的块语句或方法结束的封闭括号之前的作用域内

    private string name = "张三";
            private int age;
            public void SayHi() {
                string name = "李四";
                Console.WriteLine(name);
            }
            public void GetAge() {
                Console.WriteLine(age);
               
            }
    
            public void Test() {
    
                for (int i = 0; i < 100; i++) {
                    Console.WriteLine(i);
                }
                Console.WriteLine(i);
            }
            public void Test0()
            {
                int i = 0;
                for ( i = 0; i < 100; i++)
                {
                    Console.WriteLine(i);
                }
                Console.WriteLine(i);
                
                if (i == 0)
                {
                    int  age = 0;
                }
                else{
                    int age = 99;
                }
            }

    封装

    遥控器刚出来时候很神奇,点个按钮就能换电视台、切音量、关电视。而我们使用遥控器的人不需要知道他是怎么实现的(你只需要付钱就可以)

    和遥控器类似,面向对象的封装就是把事物的状态和行为封装在类中,使用类的人不需要知道类内部是怎么实现的,只要调用其中的属性和方法实现功能就行。就想你使用遥控,不需要知道他是怎么控制电视的,只要知道按钮能换台就行

    继承

    —卡车

    — 轿车

    卡车和轿车都是车,都有轮子、发动机。但是卡车又能拉货,轿车能拉人

    子类继承父类的属性和方法,使创建子类变得很简单,实现了代码重用。

    类的单根继承性

    关于继承的那些事儿

    案例:定义父亲类(姓,财产,血型),儿子类(玩游戏),女儿类(化妆)

    protected

    base this

    子类构造函数必须指明调用父类哪个构造函数

    练习:定义学生类(姓名、性别、年龄、成绩,Hello方法)、老师类(姓名、性别、年龄、工资、Hello方法)从中抽象出一个父类,通过构造函数给子类属性赋值this base

    继承还有一个重要的特性,父类对象可以引用子类实例。
    儿子继承父亲,儿子又把管理自己事务的权利交给父亲,那么父亲就可以代表儿子处理事务,这就是父类对象引用子类实例。现在生活中,父母可以代表儿子处理事务,总公司可以代表子公司生命权利。
    
    
    将子类对象赋值给父类对象,所得到对象是这样的一个对象:它是一个编译是为父类对象,但运行却是一个子类对象。具体特征如下:  1.被声明为父类对象  2.拥有父类属性  3.占用子类的内存空间  4.子类方法覆盖父类的方法时,此时对象调用的是子类的方法;否则,自动调用继承父类的方法.  5.我人认为这个对象既不是父类对象,也不是子类对象.当我们用到它的方法时,  我便把它看成子类对象;若用到它的属性时,我把它看成父类对象.  它是一个占用父类属性,而使用子类方法的对象.至于到底是什么对象,我认为还是得根据声明来,它应算是父类对象,但拥有子类方法.

    访问修饰符

    public 任何地方

    private 当前类中可以访问

    protected 当前类及子类中可以访问

    *internal 当前程序集可以访问

    访问级别约束

    访问级别约束:子类访问级别不能比父类高(等级观念),因为子类能够出席的场合父类都应该能出席,如果父类可访问级别比子类低就有了父类去不了的场合(儿子能去的地方爹一定要能去)。举例;方法、属性等暴露的返回值、参数的数据类型不能比方法、属性或者所在类的可访问级别低,因为这些方法、属性要能在高级场合出现,如果用到的类型却不能在这个场合出现就明显不合理了。

    多态

    先看看ToString()方法

    多态就是指不同对象收到相同消息时,会产生不同行为,同一个类在不同的场合下表现出不同的行为特征

    里氏替换原则

    父类引用指向子类对象 is-a 关键字as is

    怎么实现多态1-抽象类abstract

    什么是抽象类

    不能被实例化的类(不能new)

    抽象类的特点

    见备注

    案例1:计算形状Shape(圆circle,矩形Square ,正方形rectangle)的面积、周长

    案例2:动物animal   都有吃eat和叫bark的方法,狗dog和猫cat叫的方法不一样

    练习:学生类和老师类中抽象出父类(person),并让学生和老师都要具有SayHello和起立standup两个方法

    做网站的公司(抽象类)  你给我活我去开发网站,但是网站需要一部分flash,我公司力都是程序员(抽象类中有实现的方法)。没人会做flash(抽象方法),于是我把做flash这部分工作给其它公司去做(重写抽象方法的类)
    
    抽象类为子类提供所需要的成员
    抽象类中的成员既可以有实现也可以无实现
    抽象类必须由其子类实现它的抽象成员(除非子类也是抽象类)
    抽象类不能被实例化
    一个类只能继承一个抽象类(类的单根继承性)
    
    抽象方法(成员)不能有实现,必须被子类重写override(除非子类也是抽象类)
    抽象方法(成员)的只能出现在抽象类中。
    
    
    多态性的含义:使得能够利用基类的指针来引用不同子类的对象,以及根据所引用对象的不同,以不同的方式执行相同的操作。
    多态的作用:把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。

    虚方法virtual

    虚方法可以给父类中的方法一个实现,比如ToString()方法

    虚方法必须有实现部分,抽象方法没有提供实现部分

    案例:可以把形状类中的计算面积的方法改为虚方法

    练习:把person类中的SayHello改为虚方法让其默认为学生的 虚方法和抽象方法的区别 见备注 方法的重写override和隐藏new 见备注

    面试题:A a = new A(); A a = new B();

    虚方法和抽象方法的区别
    虚方法必须有实现,抽象方法必须没有实现
    抽象方法必须在抽象类中声明,虚方法可以出现在抽象类中
    抽象方法必须在子类中重写,虚方法可以被重写
    
    方法的重写override和隐藏new 
        重写  让子类的函数覆盖基类的函数
        隐藏  让子类的函数隐藏父类的函数
    经典面试题:
     class A
            {
                public void F()
                { Console.WriteLine("A.F"); }
                public virtual void G()
                { Console.WriteLine("A.G"); }
            }
            class B : A
            {
                //隐藏
                public new void F()
                { Console.WriteLine("B.F"); }
              }
     //一般情况,没有体现多态
                A a = new A();
                a.F();//A.F
                a.G();//A.G
                B b = new B();
                b.F();//B.F
                b.G();//B.G
                //体现多态特征
                A a1 = new B();
                a1.F();//A.F,隐藏
                a1.G();//B.G

    方法
    1、求两个数的和
    2、求两(三)个数的最大值
    3、求一个数是不是素数 “素数”是指除了能被1和自身整除外,不能被任何其它整数整除的自然数。
    4、求一个整数数组中所有数的和
    5、求数组中的最大值


    练习:定义学生类(姓名、性别、年龄、成绩,Hello方法)、老师类(姓名、性别、年龄、工资、Hello方法)从中抽象出一个父类,通过构造函数给子类属性赋值this base

    面向对象猜拳

  • 相关阅读:
    Java基础教程(15)--枚举类型
    Java基础教程(14)--嵌套类
    Java基础教程(13)--包
    Java基础教程(12)--深入理解类
    Java基础教程(11)--对象
    Java基础教程(10)--类
    Java基础教程(9)--流程控制
    Java基础教程(8)--表达式、语句和块
    Java基础教程(7)--运算符
    Java基础教程(6)--数组
  • 原文地址:https://www.cnblogs.com/fanhongshuo/p/3825411.html
Copyright © 2011-2022 走看看