zoukankan      html  css  js  c++  java
  • 7天学完Java基础之6/7

    final关键字的概念与四种用法

    final关键字代表最终,不可改变的

    常见四种用法:

    1. 可以用来修饰一个类

      当前这个类不能有任何子类

    2. 可以用来修饰一个方法

      当final关键字用来修饰一个方法的时候,这个方法就是最终方法,也就是不能被覆盖重写

    3. 还可以用来修饰一个局部变量

      被修饰后,变量不可改变

    4. 还可以用来修饰一个成员变量

    Java中有四种权限修饰符

    ​ public > protected > (default) > private

    public protected default private
    在同一个类中 YES YES YES YES
    在同一个包中 YES YES YES NO
    在不同包中,但存在继承关系 YES YES NO NO
    在不同包中,不存在继承关系 YES NO NO NO

    内部类

    分类:

    1. 成员内部类
    2. 局部内部类

    成员内部类的定义格式:

    修饰符 class 外部类名{

    修饰符 class 内部类{}

    }

    如何使用成员内部类?有两种方式

    1. 间接方式:在外部类的方法中,使用内部类,然后main只是调用外部类的方法

    2. 直接方式:公式

      外部类名称.内部类名称 对象名 = new 外部类().new 内部类();

      第一种间接使用方式

    //定义一个成员内部类
    public class Body{
    
        public class Heart{
            public void beat(){
                System.out.println("我是内部类的方法+"+"心脏跳动......"+name);
            }
        }
        public void methodBody(){
            System.out.println("我是外部类的方法");
    		new Heart().beat();
        }
        //我是成员变量,内部类也可以访问我
        private String name;
    
        public void setName(String name){
            this.name = name;
        }
        public String getName(){
            return name;
        }
    }
    
    
    //使用内部类
    public class BodyDemo{
    public static void main(String[] args){
    //间接使用
    //创建对象调用方法,间接使用内部类
    Body body = new Body();
    body.methodBody();
    //直接使用
    Body.Heart heart = new Body().new Heart();
    heart.beat();
    }
    }
    

    内部类的同名变量的访问

    public class Outer{
    	//创建一个内部类
    	int num = 10;
    	
    	public class Inner{
    		int num = 20;
    		public void methodInner(){
    			int num = 30;
    			System.out.println(num);
    			System.out.println(this.num);
    			System.out.println(Outer.this.num);
    		}
    	}
    	public void newInner(){
    		Inner inner = new Inner();
    		inner.methodInner();
    	}
    }
    
    public class OuterDemo{
    	public static void main(String[] args){
    	Outer outer = new Outer();
    	outer.newInner();
    	}
    }
    

    局部内部类

    定义格式:

    修饰符 class 外部类名称{

    ​ 修饰符 返回值类型 外部类方法名称(){

    ​ class 局部内部类名称{}

    }

    }

    public class Outer{//外部类
    	public void methodOuter(){
    		//内部类
    		class Inner{
    			//内部类的成员变量
    			int num = 10;
    			//内部类的成员方法
    			public void methodInner(){
    				System.out.println(num);
    			}
    		}
    		//让局部变量在方法里直接使用
    		Inner inner = new Inner();
    		inner.methodInner();
    	}
    }
    
    public class OuterDemo{
    	public static void main(String[] args){
    	Outer outer = new Outer();
    	//局部内部类,存在于方法中,不能超出局部使用
    	//局部只属于当前所属的方法才可以使用他
    	outer.methodOuter();
    	}
    }
    

    匿名内部类

    匿名内部类的定义格式:
    接口名称 对象名 = new 接口名称(){覆盖重写所有的抽象方法};

    public interface MyInterface {
    
    public abstract void method1();
    
    }
    
    public class InterfaceDemo {
        public static void main(String[] args) {
            MyInterface myinterface = new MyInterface() {
                public void method1() {
                    System.out.println("我是匿名内部类");
                }
            };
            myinterface.method1();
        }
    }
    

    类作为成员变量类型

    //定义一个英雄类
    public class Hero{
    	private int age;
    	private String name;
    	private Weapon code;
    	//手写的构造方法
    	public Hero(){}
    	public Hero(int age,String name,Weapon code){
    	this.age = age; this.name = name; this.code = code;
    	}
    	//设置get和set方法
    	public void setAge(int age){
    		this.age = age;
    	}
    	public int getAge(){
    		return age;
    	}
    	public void setName(String name){
    		this.name = name;
    	}
    	public String getName(){
    		return name;
    	}
    	public void setWeapon(Weapon code){
    		this.code = code;
    	}
    	public Weapon GetWeapon(){
    		return code;
    	}
    	//英雄特与方法
    	public void attack(){
    		System.out.println(name+"手持"+code.getName()+"正在大杀四方,可怕的是他今年才"+age);
    	}
    	
    }
    
    public class Weapon{
    	private String name;//已经是多兰剑了
    	public Weapon(){}
    	public Weapon(String name){
    	this.name = name;
    	}
    	public void setName(String name){
    		this.name = name;
    	}
    	public String getName(){
    		return name;
    	}
    }
    
    //创建英雄吧
    public class HeroDemo{
    	public static void main(String[] args){
    	Weapon weapon = new Weapon("多兰剑");
    	Hero hero = new Hero();
    	hero.setWeapon(weapon);
    	hero.setName("光辉女郎");
    	hero.setAge(20);
    	hero.attack();
    	} 
    }
    

    接口作为成员变量类型

    public class Hero{
    	private String name;
    	private Skill skill;
    	
    	public Hero(){}
    	public Hero(String name,Skill skill){
    		this.name = name;
    		this.skill = skill;
    	}
    	public void setName(String name){
    		this.name = name;
    	}
    	public String getName(){
    		return name;
    	}
    	public void setSkill(Skill skill){
    		this.skill = skill;
    	}
    	public Skill getSkill(){
    		return skill;
    	}
    	
    	public void attack(){
    		System.out.println("我叫"+name+"开始释放技能");
    		//传递那个接口,就用哪一个接口去调用use技能
    		skill.use();
    		System.out.println("释放技能完成");
    	}
    }
    
    public interface Skill{
    	public abstract void use();
    }
    
    public class HeroDemo{
    	public static void main(String[] args){
    		Hero hero = new Hero();
    		hero.setName("艾希");
    		Skill skill = new Skill(){
    			public void use(){System.out.println("pia==pia===pia");}
    		};
    		hero.setSkill(skill);
    		hero.attack();
    	}
    }
    
  • 相关阅读:
    JavaScript基础初始时期分支(018)
    JavaScript基础尽量少使用全局变量(001)
    linux源码安装nodejs
    js导出excel
    http 状态码
    网站导航固定头部
    gulp编译less简单demo
    mysql设置连接等待时间(wait_timeout)
    mysql视图
    网站用户行为数据挖掘
  • 原文地址:https://www.cnblogs.com/train99999/p/10891684.html
Copyright © 2011-2022 走看看