`
talentluke
  • 浏览: 606680 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

抽象方法、final、静态方法

 
阅读更多

.abstract class Name { 
 private String name; 
 public abstract boolean isStupidName(String name) {} 

  这有何错误?

答案错。abstract method必须以分号结尾,且不带花括号。

2.public class Something { 
 void doSomething () { 
  private String s = ""; 
  int l = s.length(); 
 } 
有错吗?

答案错。局部变量前不能放置任何访问修饰符 (privatepublic,和protected)final可以用来修饰局部变量 
(final如同abstractstrictfp,都是非访问修饰符,strictfp只能修饰classmethod而非variable)3.abstract class Something { 
 private abstract String doSomething (); 
 这好像没什么错吧?

答案错。abstractmethods不能以private修饰。abstractmethods就是让子类implement(实现)具体细节的,怎么可以用privateabstract method封锁起来呢? (同理,abstract method前不能加final)

4.public class Something { 
 public int addOne(final int x) { 
  return ++x; 
 } 

  这个比较明显。

  答案错。int x被修饰成final,意味着x不能在addOne method中被修改。

5.

public class Something { 
 public static void main(String[] args) { 
  Other o = new Other(); 
  new Something().addOne(o); 
 } 
 public void addOne(final Other o) { 
  o.i++; 
 } 
}

class Other { 
 public int i; 

  和上面的很相似,都是关于final的问题,这有错吗?

  答案正确。在addOne method中,参数o被修饰成final。如果在addOne method里我们修改了oreference 
(比如: o = new Other();),那么如同上例这题也是错的。但这里修改的是omember vairable (成员变量),而oreference并没有改变。

  6.

class Something { 
 int i; 
 public void doSomething() { 
  System.out.println("i = " + i); 
 } 

  有什么错呢看不出来啊。

  答案正确。输出的是"i = 0"int i属於instant variable (实例变量,或叫成员变量)instant variabledefault valueintdefault value0

7.class Something { 
    final int i; 
    public void doSomething() { 
        System.out.println("i = " + i); 
    } 
} 
和上面一题只有一个地方不同,就是多了一个 final 。这难道就错了吗 ? 
  :  错。 final int i 是个 final  instant variable ( 实例变量,或叫成员变量 )  final  instant variable 没有 default value ,必须在 constructor ( 构造器 ) 结束之前被赋予一个明确的值。可以修改为 "final int i = 0;"   
8. 
public class Something { 
     public static void main(String[] args) { 
        Something s = new Something(); 
        System.out.println("s.doSomething() returns " + doSomething()); 
    } 
    public String doSomething() { 
        return "Do something ..."; 
    } 
} 
  看上去很完美。  
  :  错。看上去在 main  call doSomething 没有什么问题,毕竟两个 methods 都在同一个 class 里。但仔细看, main  static 的。 static method 不能直接 call non-static methods 。可改成 "System.out.println("s.doSomething() returns " + s.doSomething());" 。同理, static method 不能访问 non-static instant variable  

 

 

 

有1、2、3、4、5、6等六个数字, 
要求构造一个数组,其中4不能放在第三位, 
“3”和“5”不能相连。将所有可能情况输出.

 

 

 

public class Main {

 

public static void main(String[] args) {

 

 

 

int [] buf = {1,2,3,4,5,6};

 

fullSort(buf,0,buf.length);

 

}

 

 

 

//递归实现的全排列

 

private static void fullSort(int[] buf,int begin,int end){

 

if(end-begin==1){

 

return;

 

}

 

fullSort(buf,begin+1,end);

 

if(begin==0){

 

p(begin+"bbb"+end,buf);

 

}

 

//swap

 

for(int i=begin;i<end-1;i++){

 

int obj = buf[begin];

 

buf[begin] = buf[i+1];

 

buf[i+1] = obj;

 

p(begin+"bbb"+end,buf);

 

fullSort(buf,begin+1,end);

 

obj = buf[begin];

 

buf[begin] = buf[i+1];

 

buf[i+1] = obj;

 

}

 

}

 

 

 

//输出满足条件的数据

 

public static void p(String prefix,int []buf){

 

 

 

//其中4不能放在第三位

 

if(buf[2] == 4){

 

return;

 

}

 

 

 

//“3”和“5”不能相连

 

for(int i=0;i<buf.length-1;i++){

 

if((buf[i]==3&&buf[i+1]==5)||(buf[i]==5&&buf[i+1]==3)){

 

return;

 

}

 

}

 

 

 

for(int o:buf){

 

System.out.print(o);

 

}

 

System.out.println();

 

}

 

}

 

分享到:
评论

相关推荐

    抽象类和抽象方法.pdf

    - 抽象方法不能用 `static` 或 `private` 修饰,因为静态方法与特定实例无关,而私有方法在子类中不可见。 - 类不能同时是 `final` 和 `abstract`,因为 `final` 禁止继承,而抽象类设计的初衷就是被继承。 6. **...

    接口,多态,抽象类,final

    静态方法和静态变量是属于类所有,所有对象共享。静态代码段在类加载时执行,只执行一次。在静态方法中,不能直接调用非静态属性或者方法。 7. 构造方法 构造方法是特殊的方法,它的名称与类名相同,没有返回值,...

    abstract抽象类

    Java 8之后,接口可以包含默认方法和静态方法,但仍不能有实例字段或构造函数。 - 抽象类可以包含成员变量,而接口只能有常量(final static)。 4. **访问权限** - 抽象类的访问修饰符可以是public、protected、...

    第讲-抽象类接口优秀文档.ppt

    1. 抽象类可以包含抽象方法和非抽象方法,而接口只能包含抽象方法和静态常量。 2. 抽象类可以被实例化,而接口不能被实例化。 3. 抽象类可以继承其他抽象类或接口,而接口只能继承其他接口。 思考题: A. 非抽象类...

    【IT十八掌徐培成】Java基础第05天-03.抽象类-抽象方法-修饰符组合.zip

    3. 抽象方法可以是静态的,但这样的方法不能在非抽象类中定义,因为静态方法属于类而不属于实例,这与抽象方法的定义相矛盾。 4. 抽象类可以是public、protected或默认,但不能是private,因为private类在任何地方...

    Java学习笔记---15.面向对象编程10-Java中final关键字,抽象类与接口

    - 从Java 8开始,接口可以包含默认方法(带有实现的抽象方法)和静态方法,这增加了接口的灵活性。 - 接口之间可以使用`extends`关键字实现继承,一个接口可以继承多个接口,如`interface DerivedInterface ...

    java中final和static的区别

    因为静态方法是独立于任何实例化对象,是属于类本身,所以静态方法必须被实现,不能是抽象的。 7. 静态方法经常作为工具方法。例如:Math.sqrt(参数)。 8. 静态代码块:静态代码块是在类中独立于类成员的 static ...

    JAVA类的方法调用和变量

    4. **静态方法**(static):静态方法属于类,而不是类的实例。它们可以通过类名直接调用,不依赖于对象实例。 5. **抽象方法**:只有方法签名,没有实现,必须在抽象类中定义,并由其子类提供具体实现。 类变量...

    static、final、abstract和interface使用总结

    - **静态方法**:静态方法与类相关联,而非任何特定实例。它们不能访问非静态成员,因为非静态成员依赖于具体对象。静态方法通常用于工具类,如计算、验证等不涉及实例状态的操作。例如,`public static void print...

    Java抽象类高难度面试题及解析

    - 抽象类不能包含抽象静态方法,因为抽象方法需要子类实现,而静态方法是类级别的。 16. **抽象与非抽象方法共存**: - 抽象类可以同时包含抽象方法和非抽象方法,抽象方法必须由子类实现,非抽象方法则有默认...

    Java相关知识点的学习(抽象类)

    * 静态方法 * 代码块 * 静态代码块 抽象方法的特点 1. 抽象方法是没有方法体的方法,它们必须被子类实现。 2. 抽象方法只能定义在抽象类中。 3. static和abstract关键字不能共存,static关键字用于方便调用,...

    Java中抽象类和接口的区别

    在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的...

    创建Java中的抽象类.docx

    5. **静态方法**:抽象类中可以包含静态方法,静态方法属于类而不是类的实例,因此与抽象类的实例化无关。 6. **抽象类与内部类**:除了顶级类,内部类也可以声明为抽象的。这样做时,外部类不必也是抽象的,但如果...

    PHP中abstract(抽象)、final(最终)和static(静态)原理与用法详解

    - 静态方法:同样,`static function`声明的方法也不需要通过对象实例来调用,它们与类关联而非实例。静态方法通常用于工具类或工厂方法等场景,其中不需要实例化对象就能完成特定任务。 示例代码: ```php ...

    抽象类和接口

    - 接口中的方法默认都是抽象的,但从Java 8开始,接口可以包含默认方法和静态方法。 3. **成员变量**: - 抽象类可以有成员变量。 - 接口中的成员变量默认是`public static final`。 4. **默认行为**: - 抽象...

    java 抽象类与接口的区别

    3. 方法实现:抽象类中的抽象方法可以有默认实现,而接口中的方法没有默认实现,除非是在Java 8及以上版本中引入的默认方法和静态方法。 4. 访问修饰符:抽象类中的方法可以有不同的访问修饰符,而接口中的所有方法...

    java抽象类与接口区别

    但自Java 8起,接口可以包含默认方法和静态方法,为实现类提供默认实现。 ##### 3. 成员变量 - **抽象类**:可以包含实例变量。 - **接口**:只能包含静态常量(默认为public static final)。 ##### 4. 访问修饰...

    PHP5面向对象初步-part23pdf

    - 静态方法可以调用其他静态方法,既可以使用类名直接调用,也可以使用`self::`关键字来调用当前类的静态方法。 - `self::`关键字推荐使用,因为它更清晰地表明了调用的是当前类的静态成员,与实例对象使用的`$this`...

    第7章 抽象类与接口.ppt

    抽象类可以有构造函数、非抽象方法、变量等,但是含有抽象方法的类必须被声明为抽象类。值得注意的是,Java支持单继承,意味着一个类只能直接继承一个抽象类,但可以通过接口实现多重继承的效果。 接口(interface...

Global site tag (gtag.js) - Google Analytics