• Java语言基础(13)


    1 继承(二)

      案例:Demo1

    public class Demo1 {
      public static void main(String[] args) {
    	Bmw bmw = new Bmw();
    	bmw.name = "宝马";
    	bmw.no = "555555";
    	bmw.type = "豪华版";
    	bmw.price = 200000.1;
    	bmw.color = "白色";
    	bmw.show();
    	bmw.start();
    	bmw.run();
    	bmw.stop();
      }
    }
    class Car{//父类
    //属性
      String name;
      String no;
      int speed = 0;
      String color;
    //方法
      void start(){
    	speed = 100;
    	System.out.println(name+"启动了");
      }
      void run(){
    	System.out.println(name+"在行驶,当前"+
    			"的速度是"+speed);  
      }
      void stop(){
    	speed = 0;
    	System.out.println(name+"刹车了,当前"+
    			"的速度是"+speed);
      }
    }
    //编写一个Car类(父类)
    //属性:车名,车牌,速度(int speed=0),颜色
    //方法:void start():启动,speed=100,输出启动了
    //void run():行驶,输出车名以及当前的速度
    //void stop():刹车,speed=0,输出车名以及当前速度
    class Bmw extends Car{
    //属性
      double price;
      String type;
    //方法	
      void show(){
    	System.out.println(name+","+no+","
    			+speed+","+color+","+price
    			+","+type);  
      }
    }

    2 变量的隐藏(属性的覆盖)

      子类编写的属性的名字跟父类中继承过来的属性名一致,子类编写的属性会覆盖从父类中继承过来的属性。
      案例:Demo2

    public class Demo2 {
      public static void main(String[] args) {
    	Foo2 foo = new Foo2();
    	System.out.println(foo.name);
      }
    }
    class Foo1{
      String name = "卫青";	
    }
    class Foo2 extends Foo1{
      String name = "霍去病";  	
    }
    
    public class Demo3 {
      public static void main(String[] args) {
    	Eoo2 eoo = new Eoo2();
    	System.out.println(eoo.num1);//true
      }
    }
    class Eoo1{
      int num1 = 100;	
    }
    class Eoo2 extends Eoo1{
      boolean num1 = true;	
    //变量的隐藏只看子类和父类中的属性的名字是否一致,
    //跟类型无关。  
    }

      变量的隐藏跟属性的类型无关,只要子类编写的属性的名字跟父类中继承过来的属性名一致,就覆盖了。

    3 方法重写(方法覆盖)

      子类编写的方法覆盖了从父类中继承过来的方法。
      1) 方法重写要求子类编写的方法的名字和参数,必须跟要覆盖父类中的方法的名字和参数一致。
      2) 参数一致:参数的类型和个数一致,跟参数的名字无关。
        案例:Demo4

    public class Demo4 {
      public static void main(String[] args) {
    	Koo2 koo = new Koo2();
    	koo.f1();
      }
    }
    class Koo1{
      void f1(){
    	System.out.println("今天天气很好");
    	System.out.println("父类Koo1中编写的方法");
      }	
    }
    class Koo2 extends Koo1{
      void f1(){
    	System.out.println("子类Koo2中重写" +
    			"父类Koo1中的方法f1()");  
      }	
    }
    
    public class Demo5 {
      public static void main(String[] args) {
    	User1 user = new User1();
    	user.name = "张三";
    	user.age = 26;
    	user.job = "经理";
    	user.address = "北京";
    	user.email = "san@126.com";
    	user.salary = 30000.1;
    	user.show();
      }
    }
    class Person1{//父类
    //属性
      String name;
      int age;
      String job;
      double salary;
    //方法	
      void show(){
    	System.out.println(name+","+age+","
    			+job+","+salary);  
      }
    }
    //设计一个Person1(父类)
    //属性:姓名,年龄,职位,工资
    //方法:void show():输出每一个属性的值
    class User1 extends Person1{
    //属性
      String address;
      String email;
    //方法	
      void show(){
    	System.out.println(name+","+age+","
    			+job+","+salary+","+address
    			+","+email);  
      }
    }
    
    public class Demo6 {
      public static void main(String[] args) {
    	Zoo2 zoo = new Zoo2();
    	zoo.f1(100,200);
      }
    } 
    class Zoo1{
      void f1(int a,int b){
    	int sum = a + b;
    	System.out.println("sum="+sum);
    	System.out.println("父类Koo1中的方法" +
    			"f1()");
      }	
    }
    class Zoo2 extends Zoo1{
      void f1(int num1,int num2){
    	int result = num1 * num2;
    	System.out.println("result="+result);
    	System.out.println("子类Zoo2中的方法" +
    			"f1()重写父类Zoo1中的方法f1()");
      }	
    }

      3) 方法重写跟方法重载的区别?
        a) 方法重写在子类和父类之间,子类编写的方法覆盖了从父类中继承过来的方法。方法重载在一个类的内部,方法名相同,参数不同的多个方法。
        b) 方法重写要求子类和父类中要重写方法的名字和参数一致。参数一致,参数的类型和个数一致,跟参数的名字无关。方法重载中要求重载的多个方法的名字一致,参数要不同,参数不同,参数的类型或者个数不同,跟参数的名字无关。
        c) 方法重写的目的,使用子类重新编写的方法来覆盖从父类中继承过来的方法。方法重载是把功能相似的方法起同一个名字,用户只需要记住一个名字,就可以调用多个方法,减少用户的记忆量,方便方法的使用。


    4 继承中的构造方法

      子类可以继承父类的属性和方法,但是不能继承父类中的构造方法,可以在子类的构造方法中,调用父类中的构造方法。
      1)如果父类中没有空参(没有参数)构造方法,则子类必须在自己的构造方法的第1行,使用super(参数)来调用父类中的带参数的构造方法。
        super(参数):在子类构造方法的第1行使用,调用父类中带参数的构造方法。
        案例:Demo7

    public class Demo7 {
      
    }
    class Noo1{
    //属性
      String name;
      int age;
      double salary;
    //构造方法	
      Noo1(String name,int age,double salary){
    	this.name = name;
    	this.age = age;
    	this.salary = salary;
      }  
    }
    class Noo2 extends Noo1{
    //属性	
      String address;
      String phone;
    //构造方法
      Noo2(String name,int age,double salary,
    		  String address,String phone){
    //super(参数):在子类构造方法第1行使用,调用父类
    //中带参数的构造方法
    	super(name,age,salary);
    	this.address = address;
    	this.phone = phone;
      }
    }
    
    public class Demo8 {
      public static void main(String[] args) {
    	User2 user = 
    		new User2("徐达",36,"将军",
    		  "漠北",2000000.1,"da@126.com");
        user.showAll();
      }
    }
    class Person2{
    //属性
      String name;
      int age;
      String job;
      String address;
    //构造方法
      Person2(String name,int age,String job,
    		  String address){
    	this.name = name;
    	this.age = age;
    	this.job = job;
    	this.address = address;
      }	
    //方法	
      void show(){
    	System.out.println(name+","+age+","
    			+job+","+address);  
      }
    }
    class User2 extends Person2{
    //属性
      double salary;
      String email;
    //构造方法
      User2(String name,int age,String job,
    		  String address,double salary,
    		  String email){
    	super(name,age,job,address);
    	this.salary = salary;
    	this.email = email;
      }	
    //方法
      void showAll(){
    	this.show();
    	System.out.println("工资:"+salary);
    	System.out.println("邮箱:"+email);
      }
    }

      2)如果父类中含有空参的构造方法,则子类根据需要任何编写自己的构造方法,而不需要强制使用super(参数)来调用父类中的构造方法。
        案例:Demo9

    public class Demo9 {
    
    }
    class Moo1{
    //属性
      String name;
      int age;
      String job;
      String address;
    //构造方法	
      Moo1(String name,int age,String job,
    		  String address){
    	this.name = name;
    	this.age = age;
    	this.job = job;
    	this.address = address;
      }
      Moo1(){
    	  
      }
    }
    class Moo2 extends Moo1{
    //属性
      String phone;
      double comm;
    //构造方法	
      Moo2(String name,int age,String job,
    		  String address,String phone,
    		  double comm){
    /*	  
    	this.name = name;
    	this.age = age;
    	this.job = job;
    	this.address = address;
    */
    	super(name,age,job,address);
    	this.phone = phone;
    	this.comm = comm;
      }
    }
    
    public class Demo10 {
      public static void main(String[] args) {
    	Midea midea = 
    		new Midea("美的","壁挂式",
    			  27,"黑色",5000.22);
    	midea.show();
    	midea.hot(3);
    	midea.cool(8);
      }
    }
    class Kongtiao{
    //属性
      String name;
      String type;
      int degree;
      String color;
    //构造方法
      Kongtiao(String name,String type,
    		  int degree,String color){
    	this.name = name;
    	this.type = type;
    	this.degree = degree;
    	this.color = color;
      }	
      Kongtiao(){
    	  
      }
    //方法
      void show(){
    	System.out.println(name+","+type+","
    			+degree+","+color);  
      }
      void hot(int degree){
    	this.degree = this.degree + degree;
    	System.out.println(name+"升高了"+degree
    		+"度以后,当前的温度是"+this.degree);
      }
      void cool(int degree){
    	this.degree = this.degree - degree;
    	System.out.println(name+"降低了"+degree
    		+"度以后,当前的温度是"+this.degree);
      }
    }
    //设计一个Kongtiao类(父类)
    //属性:名称,类型,温度(int degree),颜色
    //构造方法:1)给每一个属性赋值  2)空参的构造方法
    //方法:void show():输出名称,类型,温度,颜色
    //void hot(int degree):升高degree度
    //this.degree = this.degree+degree
    //void cool(int degree):降低degree度
    class Midea extends Kongtiao{
    //属性
      double price;
    //构造方法
      Midea(String name,String type,
    		  int degree,String color,
    		  double price){
    	super(name,type,degree,color);
    	this.price = price;
      }	
    //方法	
      void show(){
    	System.out.println(name+","+type+","
    			+degree+","+color+","+price);  
      }
    }

      3)在企业中,一般都建议在父类中编写一个空参的构造方法,方便子类构造方法的编写。
        案例:Demo11

    public class Demo11 {
      public static void main(String[] args) {
    	Worker worker = 
    		new Worker("韦一笑",32,"侠客",
    		  2000.1,"光明顶","xiao@126.com");
        worker.show();
        worker.showAll();
        worker.showYearSal();
        Manager manager = 
        	new Manager("任我行",45,"教主",
        	 2001.1,10000000.1,"1333333333");
        manager.show();
        manager.showYearSal();
      }
    }
    class Emp{
    //属性:姓名,年龄,职位,工资
      String name;
      int age;
      String job;
      double salary;
    //构造方法
      Emp(String name,int age,String job,
    		  double salary){
    	this.name = name;
    	this.age = age;
    	this.job = job;
    	this.salary = salary;
      }	
      Emp(){
    	  
      }
    //方法
      void show(){
    	System.out.println(name+","+age+","
    			+job+","+salary);  
      }
      void showYearSal(){
    	double result = salary * 12;
    	System.out.println(name+"的年薪是"+
    			result);
      }
    }
    class Worker extends Emp{
    //属性:姓名,年龄,职位,工资,地址,邮箱
      String address;
      String email;	
    //构造方法
      Worker(String name,int age,String job,
    		  double salary,String address,
    		  String email){
    	super(name,age,job,salary);
    	this.address = address;
    	this.email = email;
      }	
    //方法	
      void showAll(){
    	this.show();
    	System.out.println("地址:"+address);
    	System.out.println("邮箱:"+email);
      }
    }
    class Manager extends Emp{
    //属性:姓名,年龄,职位,工资,奖金,电话
      double comm;
      String phone;
    //构造方法:
      Manager(String name,int age,String job,
    		  double salary,double comm,
    		  String phone){
    	super(name,age,job,salary);  
    	this.comm = comm;
    	this.phone = phone;
      }//方法:
      void show(){
    	System.out.println(name+","+age+","
    			+job+","+salary+","+comm+
    			","+phone);  
      }
      void showYearSal(){
    	double result = salary*12+comm;
    	System.out.println(name+"年薪是"+result);
      }
    }

        综合案例:
          设计一个Emp类(父类)
          属性:姓名,年龄,职位,工资
          构造方法:1)给每一个属性赋值 2)空参的构造方法
          方法:void show():输出姓名,年龄,职位,工资
            void showYearSal(): 输出姓名和年薪(工资*12)
          编写一个Worker类(子类),继承Emp
          属性:姓名,年龄,职位,工资,地址,邮箱
          构造方法:给所有属性赋值
          方法:void showAll():输出每一个属性值
            void showYearSal():输出姓名和年薪(工资*12)
          编写一个Manager类(子类),继承Emp
          属性:姓名,年龄,职位,工资,奖金,电话
          构造方法:给每一个属性赋值
          方法:void show():输出每一个属性值
            void showYearSal():输出姓名和年薪(工资*12+奖金)
          在main中,分别创建Worker和Manager对象,调用其方法


    5 访问控制修饰符(一)
      1)public:公共的,可以用来修饰类,属性,构造方法,以及方法,被public修饰类,属性,构造方法以及方法,可以任意进行访问。
        案例:Demo12

    public class Demo12 {
      public static void main(String[] args) {
    	Coo coo1 = new Coo();
    	System.out.println(coo1.name);
      }
    }
    class Coo{
      public String name = "张辽";	
    }

      2)private:私有,可以用来修饰属性,构造方法以及方法,被privae修饰属性,构造方法以及方法,只能在本类的内部访问,外界无法访问。
        案例:Demo13

    public class Demo13 {
      public static void main(String[] args) {
    	Yoo yoo = new Yoo();
    	System.out.println(yoo.name);
    //	System.out.println(yoo.age);
    //被private修饰的属性,只能在本类的内部访问,外界
    //无法访问
    	yoo.showAge();
      }
    }
    class Yoo{
      public String name = "张三";
      private int age = 21;
      public void showAge(){
    	System.out.println("age="+age); 
      }
    }
  • 相关阅读:
    2017.2.12【初中部 GDKOI】模拟赛B组 T2:宿敌
    离散化介绍
    2017.2.12【初中部 GDKOI】模拟赛B组 T1:圆盘染色
    2017.2.12【初中部 GDKOI】模拟赛B组
    2017.2.11【初中部 GDKOI】模拟赛B组 T4:摧毁巴士站
    2017.2.11【初中部 GDKOI】模拟赛B组
    2017.2.11【初中部 GDKOI】模拟赛B组 T3:空间航行
    2017.2.11【初中部 GDKOI】模拟赛B组 T2:软件公司
    2017.2.11【初中部GDKOI】模拟赛B组 T1:最小比例
    自出题,写题解《招募士兵》
  • 原文地址:https://www.cnblogs.com/KalosOwen/p/8414528.html
Copyright © 2020-2023  润新知