当前位置: 首页 > news >正文

建设网站的知识百度 医疗网站建设

建设网站的知识,百度 医疗网站建设,凡科建站是不是免费的,如何建立免费微网站目录 一、类定义和使用 1. 类的定义 2. 类的实例化 3. 构造方法 构造方法的重载 二、this关键字 三、 static 修饰属性 四、封装 2. getter与setter 五、继承 1. 继承的语法 2. 子类中访问父类 3. 关于继承原则 4. super关键字 5. super和this 6. protected 关键…目录 一、类定义和使用 1. 类的定义 2. 类的实例化 3. 构造方法 构造方法的重载 二、this关键字 三、 static 修饰属性 四、封装 2. getter与setter 五、继承 1. 继承的语法 2. 子类中访问父类 3. 关于继承原则 4. super关键字 5. super和this 6. protected 关键字 7. final 关键字 六、多态 1. 多态实现条件 2. 重写 3. 向上转移和向下转型 3.1 向上转型 3.2 向下转型 4. instanceof关键字 一、类定义和使用 类描述一类对象所具备的共同属性和行为比较抽象的概念在类中只规定了一类对象所共同具备的属性(属性值不定)对象就是某个类的具体表现在每个具体的对象中属性才有了具体的值。 1. 类的定义 / 创建类 class ClassName{一系列的属性;// 成员变量、实例变量、字段(属性)一系列的方法;// 成员方法、实例方法 }class 为 定义类的关键字 ClassName 为类的名字 { } 中为类的主体。 类中包含的内容称为类的成员。属性主要是用来描述类的称之为类的成员属性或者类成员变量。方法主要说明类具有哪些功能称为类的成员方法。 public class称为主类一个java源文件中只能有一个主类且必须和源文件的名称保持一致 在一个源文件中可以存在N个普通类 直接使用class定义 不加public。 【例如】 1. 定义一个狗类  class Dog{publicStringname;//名字 publicStringcolor;//颜色public void bark(){System.out.printIn(name 正在汪汪叫);public void wag(){System.out.println(name正在摇尾巴); } 2. 定义一个学生类 public class Student{public String name;public String gender;public short age;public double score; //上课public void DoClass(){} //写作业public void DoHomework(){} //考试public void Exam(){} } 【注意事项】 1. 一般一个文件当中只定义一个类 2. main方法所在的类一般要使用public修饰 3. public修饰的类必须要和文件名相同 2. 类的实例化 用类 类型创建对象的过程称为类的实例化在 java 中采用 new 关键字配合类名来实例化对象。new关键字产生对象使用 . 来访问对象的属性和方法,同一个类(模板)可以产生多个实例对象。在程序中定义了一个类相当于定义了一个新的类型和StringDog和Student一定义后也是两个独立的类型。产生对象的语法: 类名称 对象引用名称 new 类名称(; Dog d new Dog(); Student s new Student(); 3. 构造方法 构造方法类中特殊的成员方法构造方法名称必须和类名称相同在创建对象时由编译器自动调用在对象整个生命周期中只调用一次 在类中 定义构造方法的规则 1. 方法名称和类名称相同 2. 构造方法没有返回值的类型声明不是void。 在Dog类中 class Dog { //构造方法public Dog() {System.out.println(Dog类定义时提供的构造方法);} //不是构造方法public void Dog() {System.out.println(Dog类定义时提供的构造方法);} }  3. 当类中没有提供构造方法定义时Java编译器在编译之后会生成默认的无参构造(不带参数的构造方法)。一旦类中提供了构造方法则编译器就不再生成默认的无参构造。 一旦在定义类时提供了构造方法则默认的无参构造就不再产生。 构造方法的作用在产生对象时为对象的所有成员属性做初始化操作 在new Dog;这一行函数背后JVM干的事情 1. 检测Dog类是否加载到JVM内存中若没加载先把Dog类加载到内存中(类加载过程) 2. 只要有new就要在堆上产生新的空间为Dog对象在堆上分配空间 3. 初始化对象分配的空间(此时用到构造方法进行属性的初始化) Java中所有的数据类型都有默认值这个默认值必须结合类来观察 只有在类中定义的成员变量才有默认值(构造方法) 当执行以下代码时内存的变化过程 // 创建Dog类对象Dog six new Dog();System.out.println(six.age);System.out.println(six.name); 由于构造方法在产生对象时为所有成员变量赋值因此可以在定义类时给某些属性“就地初始化”特殊的默认值(不是数据类型的默认值自己赋值)  public class Date { // 默认值改为2000public int year 2000; // 默认值改为1public int month 1;public int day 1;public static void main(String[] args) {Date date1 new Date();System.out.println(date1.day);System.out.println(date1.month);System.out.println(date1.year);} } 构造方法的重载 二、this关键字 1.this修饰成员方法表示直接从当前类中寻找同名方法 语法: this.方法名称(参数) 同一个类中没有继承关系其实可以省略this代码在编译时会自行补上~  2.  this修饰构造方法 语法 : this(参数)表示调用构造方法 有三大要求: 1.this调用构造方法只能在构造方法中使用不能在成员方法中使用构造方法是产生对象的 2this调用其他的构造方法必须写在当前构造方法的首行 3this调用必须是线性的不能成环就是不能你调用我我又调用你这样程序一直相互调用会停不下来  三、 static 修饰属性 static 修饰属性则该属性为静态变量直接通过类名称来调用存储在JVM的方法区该类的所有对象共享此变量!类中的有些属性是类本身所具备的属性和具体的某个对象无关该类中的所有对象这个属性值都是相同的。 public class Animal {public String name;public int age;public static String category;public Japanese(String name,int age,String category){this.name name;this.age age;this.category category;}public static void main(String[] args) {Animal a1 new Animal(小白,5,animal);Animal a2 new Animal(妞妞,6,animal);a1.category plant;//显然不是但是为了举例~System.out.println(姓名 a1.name 年龄 a1.age 属性: a1.category);System.out.println(姓名 a2.name 年龄 a2.age 属性: a2.category);} } 【关于静态变量的说明】 1. static变量只存在于类之中方法中千万不能定义静态变量  2. 静态属性直接通过类名称来访问(推荐的)没有任何该类对象这个属性也是存在的 3. 关于静态变量的存储在JVM的方法区所有该类对象共享 四、封装 1.封装 : 可见范围的问题体现的就是易用性与保护性。 1. private关键字实现属性的封装private关键字:只在当前类的内部可见出了类的{ }对外部完全隐藏。 public关键字:被public修饰的内容在当前项目中都可见描述公共的公开的内容 public和private都称为访问修饰符描述属性或方法的可见性 在下列代码中CPU和memory这两个属性用privative修饰只在当前类Computer中可见外界是无法访问这俩个属性的。screen这个属性用public修饰在当前项目都可见 class Computer {// 这个属性的可见性只在Computer类的内部可见对类的外部完全隐藏!private String cpu;//CPUprivate String memory; // 内存public String screen; // 显示器 } 2. getter与setter 当属性被private封装(隐藏)之后在类的外部要想使用这些属性必须通过类对外提供的方法来使用getter:在类的外部获取某些private属性值 setter: 在类的外部设置某些private属性值 BankCard类银行卡类 public class BankCard {// 卡号private String cardNum;// 密码private String password;// 余额private double balance;private Scanner scanner new Scanner(System.in);public BankCard(String cardNum, String password) {this.cardNum cardNum;this.password password;}// 对于卡号来说只需要取得值public String getCardNum() {System.out.println(请输入您的密码 : );String pass scanner.nextLine();if (this.password.equals(pass)) {System.out.println(密码正确正在为您查询卡号);return this.cardNum;}return 密码错误请查证后重新输入;}public String getPassword() {System.out.println(发送手机验证码 ....);// 匹配验证码return this.password;}public void setPassword() {System.out.println(请输入您之前的密码 : );String pass scanner.nextLine();if (this.password.equals(pass)) {System.out.println(请输入新密码 : );pass scanner.nextLine();this.password pass;System.out.println(密码修改成功请通过新密码登录);}else {System.out.println(密码错误请查证后再输入);}} } Test类 public class Test {public static void main(String[] args) {BankCard bankCard new BankCard(13467,123456);String num bankCard.getCardNum();System.out.println(num);String pass bankCard.getPassword();System.out.println(pass);// 设置新密码bankCard.setPassword();System.out.println(获取银行卡号 : bankCard.getCardNum());} } 类的外部要操作这些属性必须使用类提供的方法来操作就可以对使用者使用属性做一些规则和要求。若不使用private封装则使用者就可以随心所欲的操作属性无法管控 思考: private能否直接修饰一个类? 答类定义出来为了创建对象private修饰的内容只在当前类中可见。 假设 : private可以修饰类 这个类定义之后不见了有矛盾 五、继承 继承主要解决的问题是共性的抽取实现代码复用。 简单来说就是允许在原有类的基础上进行拓展实现新功能这样新产生的类称为派生类/子类原有类称为基类/父类。 1. 继承的语法 修饰符 class 子类 extends 父类 { // ... } 例如狗和猫都是动物那么我们就可以将猫和狗以及其他动物共同属性及方法进行抽取放在动物Animal这个类中采用继承的思想来达到共用。 使用继承后对上述的猫和狗类设计 // Animal.java public class Animal{String name;int age;public void eat(){System.out.println(name 正在吃饭);}public void sleep(){System.out.println(name 正在睡觉);} } // Dog.java public class Dog extends Animal{void bark(){System.out.println(name 汪汪汪~~~);} } // Cat.Java public class Cat extends Animal{void mew(){System.out.println(name 喵喵喵~~~);} } // TestExtend.java public class TestExtend {public static void main(String[] args) {Dog dog new Dog(); // dog类中并没有定义任何成员变量name和age属性肯定是从父类Animal中继承下来的System.out.println(dog.name);System.out.println(dog.age); // dog访问的eat()和sleep()方法也是从Animal中继承下来的dog.eat();dog.sleep();dog.bark();} } 【注意】 1. 子类会将父类中的成员变量或者成员方法继承到子类中了 2. 子类继承父类之后必须要新添加自己特有的成员体现出与基类的不同否则就没有必要继承了 2. 子类中访问父类 1子类中访问父类的成员变量 public class Base {int a;int b;int c; }public class Derived extends Base{int a; // 与父类中成员a同名且类型相同char b; // 与父类中成员b同名但类型不同public void method(){a 100; // 访问父类继承的a还是子类自己新增的ab 101; // 访问父类继承的b还是子类自己新增的b?c 102; // 子类没有c访问的肯定是从父类继承下来的c// d 103; // 编译失败因为父类和子类都没有定义成员变量b} } 在子类方法中 或者 通过子类对象访问成员时: 1如果访问的成员变量子类中有优先访问自己的成员变量。 2如果访问的成员变量子类中无则访问父类继承下来的如果父类也没有定义则编译报错。 3如果访问的成员变量与父类中成员变量同名则优先访问自己的。 成员变量访问遵循就近原则自己有优先自己的如果没有则向父类中找。 2子类中访问父类的成员方法 public class Base {public void methodA(){System.out.println(Base中的methodA());}public void methodB(){System.out.println(Base中的methodB());} } public class Derived extends Base{public void methodA(int a) {System.out.println(Derived中的method(int)方法);}public void methodB(){System.out.println(Derived中的methodB()方法);}public void methodC(){methodA(); // 没有传参访问父类中的methodA()methodA(20); // 传递int参数访问子类中的methodA(int)methodB(); // 直接访问则永远访问到的都是子类中的methodB()基类的无法访问到} } 1通过子类对象访问父类与子类中不同名方法时优先在子类中找找到则访问否则在父类中找找到则访问否则编译报错。 2通过派生类对象访问父类与子类同名方法时如果父类和子类同名方法的参数列表不同(重载)根据调用方法适传递的参数选择合适的方法访问如果没有则报错。 3. 关于继承原则 1关于构造方法的说明 关于构造方法的说明:调用子类构造方法产生子类对象之前默认调用父类的构造方法先产生父类对象而后产生子类对象。 比如 public class Parent {public Parent(){System.out.println(Parent的无参构造);} } public class Child extends Parent{public Child(){System.out.println(Child的无参构造);} } public class Test {public static void main(String[] args) {Child c new Child();//由于Child继承父类Parent先生成调用父类无参构造再调用子类无参构造} } 2Java中的单继承局限 Java中一个类只能使用extends继承一个父类不能同时继承多个父类 》 多重继承。但是Java允许多层继承例如狗是一种动物哈士奇是狗的一种因此狗继承动物类哈士奇继承狗类。此时哈士奇这个类就具备了狗类和动物。 4. super关键字 4.1 super修饰属性 super修饰属性表示直接从父类中寻找同名变量 子类和父类中可能会存在相同名称的成员如果要在子类方法中访问父类同名成员时该如何操作直接访问是无法做到的Java提供了super关键字该关键字主要作用在子类方法中访问父类的成员。 public class Child extends Parent{String name 儿子;public void fun(){System.out.println(Child中fun()方法);此时若父类子类中出现同名变量则优先调用子类中的变量System.out.println(name);//子类中的name就近匹配原则使用super.变量名 - 直接从父类中取该变量System.out.println(super.name);//父类中的name} } 4.2 super修饰构造方法 super调用父类的构造方法 语法: super(参数); // 表示调用类的对应构造方法 1子类构造方法的首行必须使用super(参数)表示先调用父类的构造方法。当父类存在无参构造时可以省略该语句; 2若父类中不存在无参构造则必须在子类构造方法的首行显示调用父类的有参构造 3若父类中不存在无参构造则supe参数必须写在子类构造方法首行因此此时在子类中不存在子类构造方法之间的相互调用this语句 原因(this(参数也得写在构造方法首行)矛盾! 4.3 super修饰普通方法 语法: super.方法名称(参数)直接从父类中调用同名方法 public class Parent {public void fun(){System.out.println(Parent中的fun()方法);} } public class Child extends Parent{public void fun(){System.out.println(Child中fun()方法);}public void test(){ // 当父类和子类都存在fun方法时按照就近匹配原则会调用子类中的fun方法fun(); // 因此若需要调用父类的fun方法需要使用super关键字super.fun();} 5. super和this super和this都可以在成员方法中用来访问成员变量和调用其他的成员函数都可以作为构造方法的第一条语句那他们之间有什么区别呢 【相同点】 1. 都是Java中的关键字 2. 只能在类的非静态方法中使用用来访问非静态成员方法和字段 3. 在构造方法中调用时必须是构造方法中的第一条语句并且不能同时存在 【不同点】 1. this是当前对象的引用当前对象即调用实例方法的对象super相当于是子类对象中从父类继承下来部分成员的引用  2. 在非静态成员方法中this用来访问本类的方法和属性super用来访问父类继承下来的方法和属性 3. 在构造方法中this(...)用于调用本类构造方法super(...)用于调用父类构造方法两种调用不能同时在构造方法中出现 4. 构造方法中一定会存在super(...)的调用用户没有写编译器也会增加但是this(...)用户不写则没有 this表示当前对象的成员变量或方法的调用 super表示父类对象的成语变量与方法的调用 6. protected 关键字 在类和对象章节中为了实现封装特性Java中引入了访问限定符主要限定类或者类中成员能否在类外或者其他包中被访问。 private(当前类的内部可见) default(当前包(同级目录)的不同类之间可见) protected default表示不做修饰 1在有继承关系的类之间子类可以直接访问父类中protected修饰的属性或方法 2当一个属性在类中被protected修饰符修饰这个属性在同一个包中的不同类(没有继承关系的)仍然可见!  7. final 关键字 final关键可以用来修饰变量、成员方法以及类。 1修饰变量或字段表示常量(即不能修改) final int a 10; a 20; // 编译出错 2修饰类表示此类不能被继承 final public class Animal { ... } public class Bird extends Animal { ... } // 编译出错 3修饰方法表示该方法不能被重写 六、多态 多态的概念简而言之“相同的行为/方法通过不同对象来使用时展现出不同的状态这样的一种特性称为多态性 1. 多态实现条件 在java中要实现多态必须要满足如下几个条件缺一不可 1. 必须在继承体系下 2. 子类必须要对父类中方法进行重写 3. 通过父类的引用调用重写的方法 多态体现在代码运行时当传递不同类对象时会调用对应类中的方法。 2. 重写 重写(override)重写是子类对父类非静态、非private修饰非final修饰非构造方法等的实现过程进行重新编写, 返回值和形参都不能改变方法权限可以不同。即外壳不变核心重写重写的好处在于子类可以根据需要定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。 【方法重写的规则】 1子类在重写父类的方法时一般必须与父类方法原型一致 返回值类型 方法名 (参数列表) 要完全一致 2被重写的方法返回值类型可以不同但是必须是具有父子关系的 3访问权限不能比父类中被重写的方法的访问权限更低。 4父类被static、private修饰的方法、构造方法都不能被重写。 5重写的方法, 可以使用 Override 注解来显式指定.  【重写和重载的区别】 方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现 静态绑定也称为前期绑定(早绑定)即在编译时根据用户所传递实参类型就确定了具体调用那个方法。典型代表函数重载。 动态绑定也称为后期绑定(晚绑定)即在编译时不能确定方法的行为需要等到程序运行时才能够确定具体调用那个类的方法。 3. 向上转移和向下转型 3.1 向上转型 向上转型实际就是创建一个子类对象将其当成父类对象来使用。 语法格式父类类型 对象名  new 子类类型() //animal是父类类型但可以引用一个子类对象因为是从小范围向大范围的转换。 Animal animal new Cat(元宝,6); 父类名称 父类引用 new 子类实例(); 再通过这个父类引用调用方法时到底调用的是谁? 答看这个new在哪里只要new的子类重写了调用的方法则调用的一定是这个子类重写后的方法只有当子类没有进行该方法重写时才会调用父类中的方法。 3.2 向下转型 Animal animal new Dog(); animal.方法名称; 若Dog类中有一个独有的方法bite0); // 只有Dog类中有 此时能否通过父类的引用animal.bite(); 此时若需要调用Dog类中独有的bite方法就需要脱掉Animal外衣还原为Dog类的引用才可以,这种操作就称为向下转型. 将一个子类对象经过向上转型之后当成父类方法使用再无法调用子类的方法但有时候可能需要调用子类特有的方法此时将父类引用再还原为子类对象即可即向下转换。 语法 : 子类名称 子类实例 (子类名称)类引用;  向下转型由于存在类型的强转有可能会出现类型转换异常. 1向下转型必须发生在有继承关系的类之间毫无关系的类对象不能发生向下转型(强转) public static void main(String[] args) {Animal animal new Dog();Cat cat (Cat) animal;cat.eat();} 2要发生向下转型必须先发生向上转型  4. instanceof关键字 由于向下转型存在类型转换异常的风险引入了instanceof关键字 用法:引用名称 instanceof 类名称 返回布尔值 true: 表示当前用确实指向对应类的实例可以强转 false: 表示当前引用与对应类的实例毫无关系不能强转 一般使用该关键字搭配分支语句来进行向下转型 if(animal instanceof Dog) {Dog dog (Dog) animal; } 什么时候会用到向下转型 通过相同的父类引用接收了子类实例之后fun(Animal animal){ // 需要在fun方法中调用某个具体子类独有的方法/属性需要用到向下转型 }
http://www.ho-use.cn/article/10818854.html

相关文章:

  • 桂林创新大厦网站佛山网站制作维护
  • 建设网站的费用明细大概有哪些wordpress主题什么意思
  • 淄博网站建设网站建设费的账务处理
  • 创客联盟网站建设北京网站制作公司排名
  • 网站开发流程6个阶段小程序商城源代码
  • wordpress 赏西安网站关键词优化
  • 长沙大型网站设计公司富阳网站建设报价
  • 赚钱的十大个人网站广州做餐饮的招聘网站
  • 有经验的番禺网站建设wordpress多人聊天室
  • 如何制作网站和网页seo外链专员
  • 广州建网站的公司 白云区千锋教育学费一览表
  • 招生门户网站建设方案河南小学网站建设
  • 电子商务网站开发开题报告辽宁建设工程信息网登录入口
  • 国内最好软件网站建设如何加强企业网站建设 论文
  • 互联网公司 网站竞价推广怎样管理
  • 大连自主建站模板官方网站做兼职
  • 阿里巴巴网站域名博客程序是wordpress
  • 牡丹江市营商环境建设监督局网站七台河新闻视频
  • 网站开发比较厉害上海城市建设网站
  • 网站模板制作wordpress轮播插件下载
  • 学技巧网站制作嵊州市住房和城乡建设局网站
  • 北京网站备案更换主体自己搭建一个博客网站
  • 专注合肥网站推广商城网站模板免费
  • 北京网站建设itcask上海专业网站建设服务
  • 长春快速建站最新新闻热点
  • 专业积分商城网站建设新开传奇网站刚开一秒第一区
  • 高端网站设计报价表seo常用工具
  • 成都网站制作在线网站登录人数实时更新如何做
  • 太原做网站哪里好政务网站建设交流发言
  • 福州建网站哪家好企业宽带