面向对象2

1、Object类:所有JAVA类的基类/父类;
      注意事项:任何类都可以继承Object类,toString(),equals;
2、toString()方法:
      默认格式:包名+@+哈希码值;
      一般格式:先在类中定义成员变量,再自动生成toString();
3、对象转型:
      向上转型:父类的引用指向子类;
      向下转型:子类的引用指向父类;
      例子:A父类,B子类;
      A a=new B();向上转型
      B b=(B)a;向下转型
      优缺点:向上转型为多态服务,但取不到子类里面的方法(                    多态除外);
                    向下转型都能调到父、子类里面的方法,但容易出                      现对象混乱;
4、instanceof关键字:
      作用:判断所在类的对象是否属于本类或子类;
      格式:if(对象名 instanceof 类名){};属于boolean类型;
5、多态:
      三个必要条件:继承,重写,向上转型;
      作用:可扩展性强,方便调用重写的方法,子类继承了父类                   里所有(彻底)的所有属性和方法;
6、抽象类abstract:(A 是抽象类,B是子类)
      位置:如果是类,放在class的前面;如果是方法,紧接                 public后面;
      特点:抽象类里面的抽象方法不能被实例化,必须被声明;
                 抽象类必须被继承(只有继承才能实例化方法);
                 抽象类里面可以有实例化的方法;
                 一个类里面有抽象方法,那么这个类一定是抽象类;
                 抽象类里面,不一定有抽象方法;   
                 抽象类不能new(A a=new A();错误的)
                 正确写法:(A a=new B();)
                 抽象方法必须被重写;
7、final关键字:
      特点:
      final的变量不能被改变(final int a=3;此时,你不能给      a      赋值);
      final的方法不能被重写(public final void f();后面子类不能      重写f()方法);
      final的类不能被继承(final class A{},所有类都不能继承A      类);
      格式:参考abstract抽象类。

8、接口:  
      特点:特殊抽象类;接口只包括常量和方法的定义(未实例                化);只能是public static final来修饰常量;
      格式: interface替代了class的位置;
                  interface 接口名称;
                  implements实现接口;
                  class A implements 接口名称1,接口名称2....{}
      作用:多重实现多个方法;编写项目计划;弥补了JAVA没                    有多继承的缺陷;
      注意事项:接口有时也可以当作类来用,但是必须是向上转                       型,而自己不能NEW;
9、接口与抽象类的区别:
      接口只能有未实例化的方法(其他不允许),而抽象类即可      以有抽象方法也可以实例化的方法;
      建议:用接口,因为接口方便;

 

 

小练习:

以Game为父类,编译一个多态的小程序;play();
多态的三个必要条件:继承,重写,向上转型;
public class Game{
     public void play(){
        System.out.println("不喜欢玩游戏!");
}
     public static void main(String[] args){
            Game g=new C9();
             g.play();
}
}
class C9 extends Game{
     public void play(){
         super.play();
         Scanner s=new Scanner(System.in);
         System.out.println("请输入时间:");
         String a=s.next();
         if(a.equals("23点")){
              System.out.println("可以准备睡觉了!");
}else {
               System.out.println("可以小玩一下,但还是以学习为主");
}
}
}

 

 


1、每个孩子都会犯错,父母根据孩子犯错的类型不一样,对错误进行处理,教育孩子。写出父母类,孩子类和错误类。(比如考试不及格----谈心(输出一句话)   偷东西----挨打)
public class Father{
    public void f(){
        System.out.println("孩子不能这样,不能那样!");
}
    public void f(int a){
         System.out.println("没事,下次再努力就可以了!");
}
}
class Child extends Father{
    public void f1(){
         super.f();
         System.out.println("我以长大,请不要什么事都给我安排!");
}
}
class Error extends Child{
        public void f2(){
            System.out.println("今天考试没有及格,心情低落!");
            super.f(1);
            
}
}

 


2、一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。(用方法封装起来)
public class Test{
       public void f(){     
           for(int i=1;i<=1000;i++){
                int sum=0;
               for(int j=1;j<i;j++){
                   if(i%j==0){
                       sum=sum+j;
}
}
        if(sum==i){
           System.out.println(i+"是完数!");
}
}
}
}


3、写一个抽象类并实例化里面的方法,要求要有多态的存在,自编一个简单的程序。
public abstract class Test{
      public void f(){
        System.out.println("我可以输出!");
}
      public abstract void fun();
     public static void main(String[] args){
           Test t=new B();
           t.f();   t.fun();
}
}
class B extends Test{
     @overvide
     public void fun(){
        System.out.println("已被实例化");
}
     public void f(){
          super.f();
          System.out.println("我是重写的");
}
}

 

 

第一题:
public class Test3 {
    String name;
 int age;
 String sex="男";//因为如果不给初值,下面的方法没办法判断,此时调用不到stu1()方法,sex没办法被赋值,永远会出现空指针异常;
 String add;
 public static void main(String[] args) {
  Xa1309 x=new Xa1309();
  x.sort();
 }

}
class Xa1309 extends Test3 implements HH{
 int s,z;//s,z作为中转站,把对应的age年龄值重新赋值;
 public void stu1(){
  name="小东";
  age=29;
  s=age;
  sex="男";
  add="厦门市思明区火车站";
  System.out.println("这是Xa1309班的"+name+"\t"+age+"\t"+sex+"\t"+add);
 }
 public void stu2(){
  name="小红";
  age=23;
  z=age;
  sex="女";
  add="厦门市思明区火车站梧村";
  System.out.println("这是Xa1309班的"+name+"\t"+age+"\t"+sex+"\t"+add);  
 }
 @Override
 public void sort() {
  System.out.println("排序前:");
  if(sex.equals("男")){
   stu1();
   Xa1311 x=new Xa1311();
   x.stu1();
   sex="女";
   if(sex.equals("女")){
    stu2();    
    x.stu2();
   }
   //男和女,必须有一个方法被执行一次,值才会被赋值,
   int m=x.h;
   int r=x.n;
   System.out.println("排序后:");
   if(s>m){
    x.stu1();
    stu1();
   }else{
    stu1();
    x.stu1();
   }
   if(z>r){
    x.stu2();
    stu2();    
   }else{
    stu2();
    x.stu2();
   }
  }
  
 }
 }
  

class Xa1311 extends Test3{
 int h,n;
 public void stu1(){
  name="小明";
  age=20;
  h=age;
  sex="男";
  add="厦门市思明区火车站";
  System.out.println("这是Xa1311班的"+name+"\t"+age+"\t"+sex+"\t"+add);
 }
 public void stu2(){
  name="小兰";
  age=27;
  n=age;
  sex="女";
  add="厦门市思明区火车站梧村";
  System.out.println("这是Xa1311班的"+name+"\t"+age+"\t"+sex+"\t"+add);
 }
}
interface HH{
 public void sort();
}

第二题:
import java.util.Scanner;

public class MaxandMin {
  static int a,b;
  MaxandMin(){
  Scanner s=new Scanner(System.in);
  System.out.println("请连续输入两个数字:");
  int a=s.nextInt();int b=s.nextInt();
  this.a=a;this.b=b;
 }
 public int f(int a,int b){
  int max=0;int c=0;
  if(a>b){
   c=a;
  }else{
   c=b;
  }
  for(int i=1;i<=c;i++){
   if(a%i==0&&b%i==0){
    max=i;
   }
  }
  System.out.println("两个数的最大公约数是:"+max);
  return max;
 }
 public static void main(String[] args) {
  Child c=new Child();
  c.f(a,b);
 }
}
class Child extends MaxandMin{
 int max=super.f(a,b);
 public int f(int a,int b){
  System.out.println("两个数的最小公倍数是:"+a*b/max);
  return a*b/max;
 }
}

第三题:
/**
 * 取水的抽象类
 * @author Administrator
 *
 */
public abstract class Water {
      public abstract void get();
      public static void main(String[] args) {
  W1 w=new W1();
  w.get();w.gl();w.hc();
 }
}
/**
 * 过滤的接口
 * @author Administrator
 *
 */
interface Gl{
 public void gl();
}
/**
 *缓冲的接口
 */
interface Hc{
 public void hc();
}
/**
 * 加热的接口
 * @author Administrator
 *
 */
interface Jr{
 public void jr();
}
/**
 * 放糖的接口
 * @author Administrator
 *
 */
interface Ht{
 public void ht();
}
class W1 extends Water implements Gl,Hc{

 @Override
 public void get() {
  System.out.println("此水从天上来!");
  
 }
 @Override
 public void hc() {
  System.out.println("需要缓冲!");
  
 }

 @Override
 public void gl() {
  System.out.println("需要过滤!");
  
 }

 
}


 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值