黑马程序员_封装、继承和多态

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------

封装:

隐藏对象的属性和实现细节,仅对外提供公共访问方式。(函数就是最小的封装体)

好处:将变化隔离,便于使用,提高重用性,提高安全性

封装:原则:把属性都隐藏,提供公共方法对其访问。将不需要的对外提示的内容隐藏起来通过修饰符来解决private

private:私有:权限修饰符:用于修饰类中的成员(成员变量、成员函数)(私有只在本类中有效)。

------将age私有化以后,类以外,即使建立了对象也不能直接访问。

------但是人应该有年龄,那么就需要在person类中提供对应的访问方式。

------规范写法 一个成员变量有2中操作:设置值或获取值。

私有仅仅是封装的一种表现形式。私有是最小的封装表现形式。

之所以对外提供访问方式,就是因为可以在访问方式中加入逻辑判断语句

对访问的数据进行操作,提高代码的健壮性。

 

//以下代码是封装好处的具体操作体现

class Encapsulation

{

         publicstatic void main(String[] args)

         {

                   //封装好处、原则

         }

}

class Person

{

         intage;

         voidspeak()

         {

                   System.out.println("age="+age);

         }

}

class PersonDemo

{

         publicstatic void main(String[] args)

         {

                   Personp = new Person();

                   p.age= 20;

                   p.speak();

         }

}

 

继承:

面向对象的继承关系:(单继承多继承理解:java中一个孩子只能有一个父亲)

class student  extends  Person

                     子类       继承       父类(超类)

继承概述(1):提高代码复用性;让类与类产生关系,有了这个关系才有了多态的特性;

注意:千万不要为了获取其他类的功能简化代码而继承。必须是类与类之间有所属关系才继承,所属关系叫 is a

继承概述(2):java只支持单继承,也也可说支持多继承(接口和接口之间)。

 

Java支持多层继承。也就是一个继承体系

想要使用体系,先查阅体系中父类的描述,因为父类中定义的是该体系中的共性功能。

那么在具体调用时,要创建最子类的对象?

原因:1.有可能父类不能创建对象;2.创建子类对象可以使用更多功能(基本与特有)查阅父类功能,创建子类对象使用功能

 

面向对象(子父类中变量的特点)

类中成员:变量

变量:如果子类中出现非私有的同名成员变量时,子类要访问本类中的变量用this;子类要访问父类中的同名变量super。Super的使用与this几乎一致。

This是本类对象的引用;super是父类对象的引用

 

类中成员:函数;

覆盖:当子类出现和父类一样的函数时,当子类对象调用该函数会运行子类函数的内容,如同父类函数被覆盖

注意:子类覆盖父类必须保证子类的权限大于等于父类权限,才可以覆盖,否则编译失败。静态只能覆盖静态。

重载只看同名函数的参数列表;重写(覆盖)是子父类方法要一模一样,包括返回值类型

目前为止学习的权限(private、public、默认权限:啥也不写——私有共有之间)

 

类中成员:构造函数

原因:子类对象进行初始化时,父类构造函数也会运行,那是因为子类构造函数默认第一行有一条隐式的super();

Super():会访web父类中空参数的构造函数,而且子类中所有的构造函数默认第一行都是super();

 

子类的实例化过程:

结论:1.子类所有构造函数都会访问父类中空参数的构造函数。(因为子类每一个构造函数第一行都有隐式的super();

           2.当父类中没有空参数构造函数时,子类必须手动通过super语句的形式来要指定要访问的构造函数(当然子类的构造函数第一行也可以手动的指定this语句开访问本类中的构造函数)

           3.子类中至少会有一个构造函数会访问父类中的构造函数。

 

//以下代码是老师用电脑上课的例子

class demo

{

         publicstatic void main(String[] args)

         {

 

                   Teachere = new Teacher("老师");

                   try

                   {

                            e.prelect();

                   }

                   catch(NoException b)

                   {

                            System.out.println("sss");

                   }

         }

}

class Computer

{

         publicstatic void run()

         {

                   System.out.println("电脑运行");

         }

         publicstatic void reset()

         {

                   System.out.println("电脑重启");

         }

}

class Teacher

{

         privateString name;

         privateComputer compt;

         Teacher(Stringname)

         {

                   this.name= name;

                   compt= new Computer();

         }

         /*publicvoid prelect()

         {

                   compt.run();

                   sop("讲课");

         }*/

         publicvoid prelect() throws NoException

         {

                   try

                   {

                            compt.run();

                   }

                   catch(NoExceptionb)

                   {

                            thrownew NoException(" ???");

                   }

                   System.out.println("讲课");

         }

}

class NoException extends Exception

{

         NoException(Stringmsg)

         {

                   super(msg);

         }

}

 

接口:初期理解:可以认为是一个特殊的抽象类,当抽象类中的方法都是抽象的,该类可以通过接口的形式表示

         Interface;  其中interface用于定义接口,而class用于定义类

         接口定义时格式的特点:1.接口中常见定义:常量、抽象方法。2.接口中的成员都有固定修饰符,常量修饰符:public static final;方法:publicabstract

总结:接口中的成员都是public的。如下图(固定写法)

 

类与类之间是继承关系;接口之间是继承关系(存在多继承);接口与类之间是实现关系implements

 

 

 

多态:某一类事物的多种存在形态

1.多态的基本体现(父类的引用指向了自己的子类对象——父类的引用也可以接受自己的子类对象);

2.多态的前提(必须是类与类之间的关系,要么继承要么实现;通常还有一个前提就是存在覆盖);

3.多态的好处(多态的出现提高程序的扩展性);                

4.多态的应用()。

5.多态的弊端(提高了扩展性,但只能使用父类的引用访问父类中的成员)。

6.多态的出现代码中的特点(多态使用的注意事项)。

 

//以下代码是猫 狗的代码演示

abstract class Animal

         {

                   publicabstract void eat();       

         }

class Cat extends Animal 

         {

                   publicvoid eat()

                   {

                            System.out.println("吃鱼"); 

                   }

                   publicvoid catchMouse()

                   {

                            System.out.println("抓老鼠"); 

                   }

         }       

class Dog extends Animal 

         {

                   publicvoid eat()

                            {

                                     System.out.println("吃骨头"); 

                            }

                   publicvoid kanJia()

                            {

                                     System.out.println("看家"); 

                            } 

         }

class Pig extends Animal 

         { 

                   publicvoid eat()

                            {

                                     System.out.println("饲料"); 

                            }

                   publicvoid gongDi()

                            {

                                     System.out.println("拱地");

                            }

         }

class DuoTaiTest

         {

                   publicstatic void main(String[] args)  

                            {

                                     Animala = new Cat();      //类型提升。向上转型。 父类类型指向子类对象

                                     a.eat();//吃鱼

                                     //(如果想要调用猫的特有方法时,如何操作——强制将父类的引用,转成子类类型即向下转型)

                                     Catc = (Cat)a;

                                     c.catchMouse();//抓老鼠

                            }

         }

注意:不能出现这样的操作,原因是将父类对象转成子类类型

           我们转换的是父类应用指向了自己的子类对象时,该应用可以被提升,也可以被强制转换

     多态自始至终都是子类对象在做着变换

 

成员的特点:

1、成员函数(非静态)。

   编译时期:参阅引用型变量所属的类中是否有调用的方法,有编译通过;无编译失败。

   在运行时:参阅对象所属的类中是否有调用的方法。

   简单总结就是:成员函数在多态调用时,编译看左边,运行看右边

 

2、成员变量。

   无论编译还是运行,都参考左边(引用型变量所属的类)。成员变量不涉及覆盖,函数涉及。

 

3、静态函数。

   无论编译还是运行都参考左边。

 

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------

 

基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型,个人经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的正在做大作业的学生需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业,代码资料完整,下载可用。 基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值